【发布时间】:2020-01-14 20:01:36
【问题描述】:
我正在尝试使用 vgg16 进行迁移学习。我的主要概念是训练vgg16的前几层,然后添加我自己的层,然后添加vgg16的其余层,最后添加我自己的输出层。为此,我遵循以下顺序:(1)加载层和冻结层,(2)添加我的层,(3)加载其余层(输出层除外)[这是我遇到以下错误的地方]并冻结层,(4)添加输出层。我的方法可以吗?如果没有,那么我在哪里做错了?这是错误:
ValueError:输入 0 与层 block3_conv1 不兼容:输入形状的预期轴 -1 具有值 128,但得到了形状(无、64、56、64)
完整的代码在这里以便更好地理解:
vgg16_model= load_model('Fetched_VGG.h5')
vgg16_model.summary()
model= Sequential()
#add vgg layer (inputLayer, block1, block2)
for layer in vgg16_model.layers[0:6]:
model.add(layer)
#frees
# Freezing the layers (Oppose weights to be updated)
for layer in model.layers:
layer.trainable = False
#add custom
model.add(Conv2D(64, (3, 3), activation='relu', padding='same', name='block66_conv1_m') )
model.add( Conv2D(64, (3, 3), activation='relu', padding='same', name='block66_conv2_m') )
model.add( Conv2D(64, (3, 3), activation='relu', padding='same', name='block66_conv3_m') )
model.add( MaxPooling2D((2, 2), strides=(2, 2), name='block66_pool_m'))
# add vgg layer (block 3 to last layer (except the output dense layer))
for layer in vgg16_model.layers[7:-1]:
model.add(layer)
# Freezing the layers (Oppose weights to be updated)
for layer in model.layers:
layer.trainable = False
# add out out layer
model.add(Dense(2, activation='softmax', name='predictions'))
model.summary()
【问题讨论】:
标签: tensorflow keras deep-learning transfer-learning vgg-net