Moh*_*ali 5 python keras tensorflow
我想使用 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
Run Code Online (Sandbox Code Playgroud)
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.
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的代码:
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)
Run Code Online (Sandbox Code Playgroud)
cnnModel.pop() 正在工作 问题仅在尝试添加下一层时发生。
感谢您的帮助。
您可以尝试使用Model而不是Sequential,例如:
vgg16_model = keras.applications.vgg16.VGG16()
drop_layers = [13, 16]
input_layer = x = vgg16_model.input
for i, layer in enumerate(vgg16_model.layers[1:], 1):
if i not in drop_layers:
x = layer(x)
x = keras.layers.Dense(2048, name="compress_1")(x)
x = keras.layers.Dense(1024, name="compress_2")(x)
x = keras.layers.Dense(512, name="compress_3")(x)
cnnModel = keras.models.Model(inputs = input_layer, outputs = x)
for layer in cnnModel.layers[0:4]:
layer.trainable = False
del vgg16_model
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3598 次 |
| 最近记录: |