2017-12-22 27 views
0

私はTensorFlowとKerasに新しいです、と私は構造を有している訓練されたモデルがあります:私はNoneから1までにバッチ番号を修正する必要がある(他のCNNのフレームワークにモデルを変換する)いくつかの理由Kerasで訓練されたモデルの入力形状を設定するには?

_________________________________________________________________ 
Layer (type)     Output Shape    Param # 
================================================================= 
input_1 (InputLayer)   (None, 128, 128, 3)  0   
_________________________________________________________________ 
conv1 (Conv2D)    (None, 64, 64, 8)   216  
_________________________________________________________________ 
... 

を入力した形が:(1,128,128,3)になるようにしてください。希望の構造は次のようになります。

_________________________________________________________________ 
Layer (type)     Output Shape    Param # 
================================================================= 
input_1 (InputLayer)   (1, 128, 128, 3)  0   
_________________________________________________________________ 
conv1 (Conv2D)    (1, 64, 64, 8)   216  
_________________________________________________________________ 
... 

新しい入力層を置き換えようとしましたが、機能しませんでした。ヒントやヒントをいただければ幸いです!

答えて

1

明示的にbatch_shapeの新しい入力を作成し、それをモデルに渡すことができます。次に、別のモデルを作成します。私は他のフレームワークは、このかかわらを処理するかどうかわからない

from keras.layers import Input 
from keras.models import Model 

newInput = Input(batch_shape=(1,128,128,3)) 
newOutputs = oldModel(newInput) 
newModel = Model(newInput,newOutputs) 

これは、あなたがKerasにしたいモデルを作成します。しかし、他のフレームワークの動作は大丈夫かそうでないかもしれません。

それはあなたに良い結果をもたらすものではありません場合は、あなただけの入力形状変更、再びモデル全体を書きたいかもしれません:Sequential場合

  • を:最初の層はbatch_input_shape=(1,128,128,3)
  • を持つべきですModel場合:入力テンソルは、上記のようにする必要があります:あなたは)古いモデルとまったく同じコードを持つ彼の新しいモデルをトンを作成した後、重みを転送Input(batch_shape=(1,128,128,3))

newModel.set_weights(oldModel.get_weights()) 
+1

最初の解決策は機能しますが、以下のような新しい構造がありました:input_1(1,128,128,3)| model_1(multiple)、ここでModel_1では、InputLayerはまだ(None、128,128,3)です...他のフレームワークに変換できませんでした。モデルをもう一度書き直し、重みをインポートしてみましょう。ありがとう! –

関連する問題