2017-12-09 10 views
1

私はkerasでcross_modality_pretrainをやっています。 IはInceptionResNetv2 pretrainedモデルを使用し、I(3 3 20 32)Kerasでcross_modality_pretrainedを実行する方法:異なる形状のウェイトを設定する

に変更した形状であるconv2d_1、(3 3 3 32)(高さ、幅、チャネル、出力)

model_base = InceptionResNetV2(include_top=False, weights='imagenet') 

weight = model_base.get_weights() 
weight_conv2d_1 = weight[0] 
weight_conv2d_1 = np.mean(weight_conv2d_1, axis=2, keepdims=True) 

の重みを取得します

for i in range(20): 
    if i == 0: 
     weight_change = np.concatenate((weight_conv2d_1,), axis=2) 
    else: 
     weight_change = np.concatenate((weight_change, weight_conv2d_1), axis=2) 

は今、私は

weight[0] = weight_change 
model_base.set_weights(weight) 

、新しい体重を設定したい。しかし、私はエラーを取得:

ValueError: Cannot feed value of shape (3, 3, 10, 32) for Tensor u'Placeholder:0', which has shape '(3, 3, 3, 32)' 

どうすれば解決できますか?ありがとうございました!

答えて

0

まず、エラーがset_weight入力get_weightと同じ形状を有するべきであるが、しかし、それらは、(3 3 3 32)であり、(3 3 20 32)。

第2に、モデル構成パラメータを(3 3 3 32)から(3 3 20 32)に変更して、モデル構成パラメータmodel.weights()を変更して解決しようとしました。 model.weights() return list[tf.Variable < shape (3 3 3 32)>]。Pythonでは、タイプlistは変更可能ですが、失敗しました。変更できません。どうすれば解決できますか?ありがとうございました !

最後に、model.get_configで問題を解決し、設定パラメータを取得して変更し、新しいモデルをModel.from_config()で再構築します。

関連する問題