【发布时间】:2019-05-23 13:13:01
【问题描述】:
我正在尝试修改实现 here 的 network。该网络使用胸片images作为输入,将其分为14类(13类疾病,未发现)。该网络不将患者的年龄和性别作为输入。所以我也想向网络提供这些信息。总之网络的最后3层是这样的:
bn (BatchNormalization) (None, 7, 7, 1024) 4096 conv5_block16_concat[0][0]
__________________________________________________________________________________________________
avg_pool (GlobalAveragePooling2 (None, 1024) 0 bn[0][0]
__________________________________________________________________________________________________
predictions (Dense) (None, 14) 14350 avg_pool[0][0]
所以到目前为止我所做的如下:
我只是使用model_vgg16.layers.pop() 弹出最后一个密集层。
然后根据expexted网络变成:
bn (BatchNormalization) (None, 7, 7, 1024) 4096 conv5_block16_concat[0][0]
__________________________________________________________________________________________________
avg_pool (GlobalAveragePooling2 (None, 1024) 0 bn[0][0]
我知道我可以使用以下方法添加图层:
new_layer = Dense(14, activation='softmax', name='my_dense')
inp = model.input
out = new_layer(model.layers[-1].output)
model2 = Model(inp, out)
但我不知道如何添加一个层,该层从前一层获取输入以及 1 个标量值(年龄 [0:100])和一个二进制值性别 [0:1]。
那么我如何添加最后一层,该层从前一层获取输入以及 1 个标量值和 1 个二进制值?
编辑:我使用的基本模型是 DenseNet121。最后的一些层看起来像这样:
编辑 我加载模型的方式如下:
cp = ConfigParser()
cp.read(config_file)
# default config
output_dir = cp["DEFAULT"].get("output_dir")
base_model_name = cp["DEFAULT"].get("base_model_name")
class_names = cp["DEFAULT"].get("class_names").split(",")
image_source_dir = cp["DEFAULT"].get("image_source_dir")
image_dimension = cp["TRAIN"].getint("image_dimension")
output_weights_name = cp["TRAIN"].get("output_weights_name")
weights_path = os.path.join(output_dir, output_weights_name)
best_weights_path = os.path.join(output_dir, f"best_{output_weights_name}")
model_weights_path = best_weights_path
model_factory = ModelFactory()
model = model_factory.get_model(
class_names,
model_name=base_model_name,
use_base_weights=False,
weights_path=model_weights_path)
现在模型在变量model 中。
然后按照建议我做
x = model.output
flat1 = Flatten()(x)
并得到这个错误:
ValueError: Input 0 is in compatible with layer flatten_27: expected min_ndim=3, found ndim=2
当我使用model.layers.pop()删除最后一层后重复同样的事情时
我仍然遇到同样的错误?即使我花了几个小时也无法克服这个问题。那么如何做到这一点呢?
【问题讨论】:
标签: python keras deep-learning computer-vision