【问题标题】:Change input size of vggface pretained model更改 vgg 人脸预训练模型的输入大小
【发布时间】:2019-06-04 05:18:09
【问题描述】:

我尝试更改 pertrained Vgg 人脸模型的输入大小,每次更改时都会出错,这让我出错了如何将输入大小从 224x224x3 更改为 64x64x3 有没有办法直接更改它无需再次训练模型,直接使用训练后的权重

model.add(ZeroPadding2D((1, 1),include_top=False,input_shape=(64, 64, 3)))

model.add(Convolution2D(64, (3, 3), activation='relu'))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2), strides=(2, 2)))

model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(128, (3, 3), activation='relu'))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(128, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2), strides=(2, 2)))

model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(256, (3, 3), activation='relu'))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(256, (3, 3), activation='relu'))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(256, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2), strides=(2, 2)))

model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(512, (3, 3), activation='relu'))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(512, (3, 3), activation='relu'))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(512, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2), strides=(2, 2)))

model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(512, (3, 3), activation='relu'))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(512, (3, 3), activation='relu'))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(512, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2), strides=(2, 2)))

model.add(Convolution2D(4096, (7, 7), activation='relu'))
model.add(Dropout(0.5))
model.add(Convolution2D(4096, (1, 1), activation='relu'))
model.add(Dropout(0.5))
model.add(Convolution2D(2622, (1, 1)))
model.add(Flatten())
model.add(Activation('softmax'))


from keras.models import model_from_json

deep= model.load_weights('/Users/macbookpro/PycharmProjects/untitled/venv/vgg_face_weights.h5')

代码: vggface

当我尝试调用 include_top 时出现此错误:

TypeError: ('Keyword argument not understood:', 'include_top')

当我直接更改输入大小时,出现此错误:

ValueError: Negative dimension size caused by subtracting 7 from 2 for 'conv2d_14/convolution' (op: 'Conv2D') with input shapes: [?,2,2,512], [7,7,512,4096].

【问题讨论】:

  • 奇怪!! 64x64 实际上对于这种架构是可能的。你遇到了什么错误?
  • 我可能错了,但我认为 ZeroPadding2D 层没有include_top 参数。请附上完整的代码和你得到的错误。
  • 感谢你们的 cmets 伙计们,我发布了与我的代码相似的代码链接
  • @marcoromelli 这是真的,当我尝试调用 include_top 时出现错误

标签: tensorflow keras deep-learning vgg-net


【解决方案1】:

首先,删除include_top=False
您的问题是这种架构对于 64x64 输入来说太深了。特别是这一行:

model.add(Convolution2D(4096, (7, 7), activation='relu'))

正在尝试对大小为 2x2 的输入执行 7x7 卷积,这是不可能的。
一个可能的解决方案是在最后一个 MaxPooling 层之后移除 Convolutions 并使用一些 Dense 层来代替。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-05
    • 2017-10-25
    • 2019-10-30
    • 2022-01-23
    • 2020-05-27
    • 2018-09-25
    • 2019-03-08
    • 1970-01-01
    相关资源
    最近更新 更多