我正在尝试将VGG19的前10层用于图像分类任务的转移学习。
我尝试使用前10层,但是当我将其添加到顺序模型并显示摘要时,我得到了一个错误。
basemodel = VGG19(include_top = False)
x = basemodel.layers[-10]
model = Sequential()
model.add(keras.layers.Conv2D(32,(7,7),input_shape = (256,256,3),activation = 'relu'))
model.add(x)
model.summary()
答案 0 :(得分:0)
我运行模型,错误是:
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@1.0.0/dist/tf.min.js"></script>
epochs: <input type="number" id="epochs" value="50" />
learning rate: <input type="number" id="learning_rate" value="0.04" />
<button id="train">Train</button>
从ValueError: Input 0 is incompatible with layer block4_conv1: expected axis -1 of input shape to have value 256 but got shape (None, 250, 250, 32)
删除输入形状
并将其添加到basemodel:
keras.layers.Conv2D
或者如果您想使用Imagenet:
basemodel = VGG19(include_top = False,input_shape=(256,256,3),weights='None')
拟合模型,让我知道发生了任何错误。
答案 1 :(得分:0)
您仅从VGG模型中提取了一层,然后以错误的方式连接了它们。 这里是正确的方法之一:
basemodel = VGG19(include_top = False)
model = tf.keras.Sequential(basemodel.layers[:10])
model.add(keras.layers.Conv2D(32, (7, 7), activation = 'relu'))
model.summary()
请注意,VGG
的第一层是InputLayer
,因此您应该使用basemodel.layers[:11]
。
请注意,要微调模型,最好固定VGG层的权重:
for layer in model.layers[:10]:
layer.trainable = False
答案 2 :(得分:0)
问题是不是添加前 10 层,而是从顶部添加第 10 层。此外,该层的输入应具有 256 的倍数的通道。只需将代码替换为:
model.add(keras.layers.Conv2D(256,(7,7),input_shape = (256,256,3),activation = 'relu'))