Tensorflow tf.keras替换预训练resnet50中的下层
是否可以在tf.keras.applications中移除/替换预训练ResNet50模型的底层 例如,我尝试过这样做:Tensorflow tf.keras替换预训练resnet50中的下层,tensorflow,keras,tensorflow2.0,tf.keras,Tensorflow,Keras,Tensorflow2.0,Tf.keras,是否可以在tf.keras.applications中移除/替换预训练ResNet50模型的底层 例如,我尝试过这样做: import tensorflow as tf pretrained_resnet = tf.keras.applications.ResNet50(include_top=False, weights='imagenet') inputs = tf.keras.Input(shape=(256,256,1)) x = tf.keras.layers.ZeroPadding2
import tensorflow as tf
pretrained_resnet = tf.keras.applications.ResNet50(include_top=False, weights='imagenet')
inputs = tf.keras.Input(shape=(256,256,1))
x = tf.keras.layers.ZeroPadding2D()(inputs)
x = tf.keras.layers.Conv2D(filters=64,
kernel_size=(7,7),
strides=(2,2),
padding='same')(x)
outputs = pretrained_resnet.layers[3](x)
test = tf.keras.Model(inputs, pretrained_resnet.output)
但它给出了这个错误:ValueError:Graph disconnected:无法获取张量张量的值(“input_2:0”
我也尝试过使用tf.keras Sequential API,但这不起作用,因为ResNet不是一个序列模型。我基本上只是尝试用一个新的层替换ResNet50中的第一个Conv2D层。这可能吗?或者我必须重写整个ResNet模型吗
如果您有任何建议,我们将不胜感激。
ZeroPadding2D
和Conv2D(7*7,64,第2步)
是Resnet50
网络的2层和3层
因此,此处显示仅替换Resnet50中的第一层(即输入层)
from tensorflow.keras.applications import ResNet50
import tensorflow as tf
model = ResNet50(include_top = False, weights = 'imagenet')
model.save('model.h5')
res50_model = tf.keras.models.load_model('model.h5')
#res50_model.summary()
要从网络中删除第一层,可以运行如下代码
res50_model._layers.pop(0)
newInput = tf.keras.Input(shape=(256,256,3))
newOutputs = res50_model(newInput)
newModel = tf.keras.Model(newInput, newOutputs)
newModel.summary()
Resnet50要求输入必须有3个通道
,因此将输入层形状添加为(256256,3)
,而不是(256256,1)
要添加新的输入层,可以运行如下代码
res50_model._layers.pop(0)
newInput = tf.keras.Input(shape=(256,256,3))
newOutputs = res50_model(newInput)
newModel = tf.keras.Model(newInput, newOutputs)
newModel.summary()
输出:
Model: "model"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_2 (InputLayer) [(None, 256, 256, 3)] 0
_________________________________________________________________
resnet50 (Model) multiple 23587712
=================================================================
Total params: 23,587,712
Trainable params: 23,534,592
Non-trainable params: 53,120
_________________________________________________________________
ZeroPadding2D
和Conv2D(7*7,64,2步)
是Resnet50
网络的2nd
和3rd
层。请确认,您是否只想替换第一层,即输入层?如果是,在回答部分,我已经提供了解决方案。谢谢!我可以问一下,为什么您在替换层之前保存并加载模型吗?