【发布时间】:2018-04-05 17:36:26
【问题描述】:
我想使用 keras 的 vgg16 预训练模型。尝试更改模型时,我注意到一些奇怪的行为。
1) 我添加了一些经过训练的模型的layers。我的问题是张量板显示了我没有添加到序列模型中的模型层。这很奇怪,因为我还删除了导入的模型。我认为这与层之间的依赖关系有关,所以我想删除这种依赖关系。我该怎么做?
例如,在这张图片中,有两层我没有添加,但它们显示在图表中
vgg16_model = keras.applications.vgg16.VGG16()
cnnModel = keras.models.Sequential()
for layer in vgg16_model.layers[0:13]:
cnnModel.add(layer)
for layer in vgg16_model.layers[14:16]:
cnnModel.add(layer)
for layer in vgg16_model.layers[17:21]:
cnnModel.add(layer)
cnnModel.add(keras.layers.Dense(2048, name="compress_1"))
cnnModel.add(keras.layers.Dense(1024, name="compress_2"))
cnnModel.add(keras.layers.Dense(512, name="compress_3"))
for layer in cnnModel.layers[0:4]:
layer.trainable = False
del vgg16_model
2) 使用cnnModel.pop()时会出现第二个问题。事实上,我已经添加了所有图层,但是在添加下一个之前我对我不想要的图层做了一个弹出,这是我得到的错误。
Layer block4_conv2 has multiple inbound nodes, hence the notion of "layer output" is ill-defined. Use `get_output_at(node_index)` instead.
这是我正在使用的代码:
for layer in vgg16_model.layers[0:14]:
cnnModel.add(layer)
cnnModel.pop()
for layer in vgg16_model.layers[14:17]:
cnnModel.add(layer)
cnnModel.pop()
for layer in vgg16_model.layers[17:21]:
cnnModel.add(layer)
cnnModel.pop() 正在工作 该问题仅在尝试添加下一层时出现。
感谢您的帮助。
【问题讨论】:
-
你解决了吗?我面临同样的情况
-
我也有同样的问题。但有趣的是,当我绘制模型时,尽管 TensorBoard 仍然显示丢弃的层,但它们并没有出现。使用
from tensorflow.keras.utils import plot_modelplot_model(model, to_file = 'model_plot.png', show_shapes = True, show_layer_names = True)绘制模型并查看。我唯一担心的是,我不希望不必要的层增加计算成本。
标签: python tensorflow keras