3 回答
TA贡献2051条经验 获得超10个赞
最简单的方法是在 VGG16 中设置 include_top=False, pooling=max。然后看下面的代码:
x=backbone.layers[-1].output
predictions=Dense (len(classes), activation='softmax')(x)
model = Model(inputs=backbone.input, outputs=predictions)
model.compile(Adamax(lr=lr_rate), loss='categorical_crossentropy', metrics=['accuracy'])
TA贡献1155条经验 获得超0个赞
它实际上并不是删除层,而是创建一个没有它的新模型。
我真的不明白你想做什么,但物体检测器通常会这样做。
inputs = keras.layers.Input((None, None, 3), include_top=False)
backbone = keras.applications.VGG16(input_tensor=inputs)
x = backbone.get_layer('block1_conv2').output
x = keras.layers.Dense(50)(x)
model = keras.models.Model(inputs=inputs, outputs=x, name=backbone.name)
这将产生一个只有前两层的模型,并添加一个新的Dense作为输出。
TA贡献1786条经验 获得超11个赞
使用 model.save() 保存所需的内容,清除 tf 会话,然后再次加载它可以解决问题(如@NatthaphonHongcharoen 所建议(在评论中):
model.save(model_file)
del model
keras.backend.clear_session()
model = keras.models.load_model(model_file)
现在,tensorflow 中导出的图仅显示所需的层,冻结图生成一个较小的 .pb 文件。
然而,另一个问题仍然存在,即使使用基础模型的单层并添加编译器仍然说的密集层
设备内存不足,无法运行模型。
但这是一个不同的问题,没有直接在这个问题中提出。
添加回答
举报