【发布时间】:2017-05-08 21:06:57
【问题描述】:
我正在开发一个 CNN,旨在从一组心脏 MRI 图像中预测 2 个不同的体积(收缩压和舒张压)。
我做的第一件事是实现 2 个独立的“顺序”CNN,每个都预测一个卷。
首先定义模型:
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 个不同的体积:
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)
但是,我因此必须训练两个不同的模型,包括 2 个卷积部分。
===> 我想共享我的网络的卷积部分,并添加 2 个不同的 FC 层来预测我的体积(1 个独特的卷积部分和两个单独的 FC 层共享卷积部分)
你知道如何用 Keras 做到这一点吗?我必须切换到 Keras Graph 模式吗?
非常感谢您的帮助。
【问题讨论】:
标签: python tensorflow keras theano conv-neural-network