2017-12-10 14 views
1

同じ重みをある程度共有する2つの同じブランチを実装しようとしています。あなたがここに見るグラフィックenter image description hereは、私が持っているものの単純化されたモデルです。だから、私は入力を持っています:否定的で肯定的なもの、conv1_1_xからRpnまでのすべての層は同じ重みを持つべきです。私は、これまで実施することを試みたことは次のとおりです。TheasanoとKerasで同じ重みを共有する2つの同一のブランチを実装する方法

def create_base_network(input_shape, branch, input_im, img_input, roi_input): 
      def creat_conv_model(input_shape): 
       branch = Sequential() 
       branch.add(Conv2D(64,filter_size,subsample = strides, input_shape=input_shape , activation='relu',kernel_initializer='glorot_uniform' ,name='conv1_1_'+str(branch))) 
       branch.add(Conv2D(64,filter_size, subsample = strides, activation='relu', kernel_initializer='glorot_uniform',name='conv1_2_1'+str(branch))) 
       branch.add(MaxPooling2D(pool_size=(2,2), strides=pool_stride, name='pool1_'+str(branch))) 
       branch.add(Conv2D(128,filter_size,subsample = strides, activation='relu', kernel_initializer='glorot_uniform',name='conv2_1_'+str(branch))) 

       return branch 
      shared_layers = creat_conv_model(input_shape) 
      rpn_output = rpn(shared_layers(input_im),9,branch) 
      model = Model([img_input, roi_input], rpn_output[:2]) 

      return model 


Branch_left = create_base_network((64, 64, 3), 1, img_input_left, img_input, roi_input) 
Branch_right = create_base_network((64, 64, 3), 2, img_input_right, img_input, roi_input)  

私はこれを実行して、私は次のエラーを取得:

RuntimeError: Graph disconnected: cannot obtain value for tensor /input_2 at layer "input_2". The following previous layers were accessed without issue: [] 

誰でも助けることができますか?

+0

なぜ2つが同じで、同じ入力を使用しているのですか? –

+0

入力は2つの異なる画像になります。 1つの負の入力と1つの正の入力。新しい実装で質問を編集しました。この場合、重みが実際に共有されているかどうか確認してください。 – Tassou

答えて

0

重みを共有するモデルの場合は、1回のみ作成する必要があります。 2つのモデルを作成することはできません。

shared_model = creat_conv_model((64, 64, 3), left) 

rpnも共有するモデルである場合は、1時間のみ、それを作成する必要があります。

rpn_model = create_rpn(...) 

を次にあなたが入力合格:モデルの作成について

img_neg_out = shared_model(img_input_left) 
img_neg_out = rpn_model(img_neg_out) 

img_pos_out = shared_model(img_input_right) 
img_pos_out = rpn_model(img_pos_out) 

branch_leftbranch_rightは、あなたが何をしたいのか、どのように訓練したいのかによって異なります。

+0

お寄せいただきありがとうございます。私の編集を見ましたか?これも私がやっていることではありませんか?または、私は名前= 'conv1_2_1' + lrftの場合はbrh = 1、ロジックの場合は2つのstr(brh)に従ってレイヤの名前を変更しているという事実はありますか? – Tassou

+0

いいえ、2つのモデルを作成しています。彼らは体重を分けません。 –

+0

機能的なAPIモデルでこれを行う方法は、最初から入力が必要なので実際にはありますか? – Tassou

関連する問題