[英]Keras use part of pretrained models (ResNet 18)
我从这里使用预训练的 ResNet18 我想使用从层 [4] 到 [-4] 的部分模型
我尝试使用想要的图层创建一个新模型,例如
res_net = ResNet18((224, 224, 3), weights='imagenet')
model = Model(res_net.layers[4].input, res_net.layers[-4].output)
但这个错误显示
ValueError:图形断开连接:无法在层“bn_data”处获取张量 Tensor("data_5:0", shape=(None, 224, 224, 3), dtype=float32) 的值。 访问以下先前层没有问题:[]
也试试这个
res_net = ResNet18((224, 224, 3), weights='imagenet', include_top=False)
x = Input(shape=(192, 640, 6))
conv1 = layers.Conv2D(64, kernel_size=7, strides=2, padding='same', input_shape=(192, 640, 6),name='conv1')(x)
l = res_net.layers[4](conv1)
for i in range(5, len(res_net.layers[:-4])):
l = res_net.layers[i](l)
model = Model(inputs=x,outputs=l)
model.summary()
但这个错误显示
ValueError:应在输入列表上调用合并层。
你可能想用
model = Model(res_net.layers[4].input, res_net.layers[0:-4].output)
同样值得注意的是,不鼓励上述做法。 从你的代码来看,我猜你正试图从 resnet18 的最后 4 层获取输出。 要做到这一点首先定义一个resnet50模型,然后创建,其输入从resnet50模型的输入抽头和输出从resnet50 14日被挖掘的新模式:
from tensorflow.keras.applications.ResNet50 import ResNet50
from tensorflow.keras.models import Model
base_model = ResNet50(weights='imagenet', include_top=True)
ResNet14 = Model(inputs = base_model.input,outputs = base_model.get_layer('conv2_block1_0_conv').output)
如果您不确定 resnet50 中所有层的名称或 Keras 中的任何预建模型,您可以使用:
for layer in base_model.layers:
print(layer.name)
要获取第 14 层的名称,您可以使用print(base_model.layers[13].name)
快乐编码
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.