心臓MRI画像から2つの異なるボリューム(収縮期および拡張期)を予測することを目指しています。Keras - CNNの畳み込み部分を2つの別々の完全接続レイヤーと共有する方法
私がやった最初のことは、2つの別々の「順次」CNNを実装して、それぞれが1つのボリュームを予測することです。
まずモデルの定義:しかし、私はこのように2で、2つの異なるモデルを訓練する必要が
model_systole= get_model()
model_diastole= get_model()
print('Fitting systole model...')
hist_systole = model_systole.fit_generator(generator_train_sys, nb_epoch = 1,samples_per_epoch=N_train,validation_data=generator_validate_sys,nb_val_samples=N_validate)
print('Fitting Diastole model...')
hist_diastole = model_diastole.fit_generator(generator_train_dia,nb_epoch = 1,samples_per_epoch=N_train,validation_data=generator_validate_dia, nb_val_samples=N_validate)
:
def get_model():
dim_img = 64
model = Sequential()
model.add(Activation(activation=center_normalize, input_shape=(30, dim_img, dim_img)))
# CONVOLUTIONAL LAYERS
model.add(Convolution2D(32, 3, 3, border_mode='same'))
model.add(Activation('relu'))
model.add(Convolution2D(32, 3, 3,border_mode='same'))
model.add(Activation('relu'))
model.add(Dropout(0.25))
model.add(Convolution2D(64, 3, 3, border_mode='same'))
model.add(Activation('relu'))
model.add(Convolution2D(64, 3, 3, border_mode='same'))
model.add(Activation('relu'))
model.add(ZeroPadding2D(padding=(1, 1)))
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))
model.add(Dropout(0.25))
# FULLY CONNECTED LAYERS
model.add(Flatten())
model.add(Dense(512, W_regularizer=l2(1e-3)))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(1))
adam = Adam(lr=0.0001)
model.compile(optimizer=adam, loss=root_mean_squared_error)
return model
をそして、私は2つの異なるボリュームを予測するために、2つの異なるモデルを呼び出します畳み込み部分。
===>私は(1つのユニークな畳み込み部分2つの別々のFC層は畳み込み一部を共有する)私のネットワークの畳み込み一部を共有したい、と私のボリュームの両方を予測することに2つの異なるFCレイヤを追加します
あなたはKerasでこれを行う方法を知っていますか? Kerasグラフモードに切り替える必要がありますか?
ありがとうございました。
大変ありがとうございました。今晩はこれを試してみます。 – JeromeK
あなたは新しい 'Model'クラスを学ぶのに少し時間を費やす必要がありますが、それはそれだけの価値があります。あなたの問題を解決するには、回答を受け入れたものとしてマークしてください。 –
なぜモデルを平坦化する必要がありますか? – anon