当前位置: 首页 > 面试题库 >

使用预训练的VGG-16模型的咖啡因形状不匹配误差

戚永福
2023-03-14
问题内容

我正在使用PyCaffe来实现受VGG
16层网络启发的神经网络。我想使用可从其GitHub页面上获得的预训练模型。通常,这通过匹配图层名称来起作用。

对于我的"fc6"图层,我的train.prototxt文件中具有以下定义:

layer {
  name: "fc6"
  type: "InnerProduct"
  bottom: "pool5"
  top: "fc6"
  inner_product_param {
    num_output: 4096
  }
}

这是VGG-16部署体系结构的prototxt文件。请注意,"fc6"他们的原型中的与我的相同(除了学习率,但这无关紧要)。还值得注意的是,输入在我的模型中也都是相同大小的:3通道224x224px图像。

我一直在密切关注本教程,以下是给我一个问题的代码块:

solver = caffe.SGDSolver(osp.join(model_root, 'solver.prototxt'))
solver.net.copy_from(model_root + 'VGG_ILSVRC_16_layers.caffemodel')
solver.test_nets[0].share_with(solver.net)
solver.step(1)

第一行加载我的求解器原型,然后第二行复制预训练模型(VGG_ILSVRC_16_layers.caffemodel)中的权重。当求解器运行时,出现以下错误:

Cannot copy param 0 weights from layer 'fc6'; shape mismatch.  Source param 
shape is 1 1 4096 25088 (102760448); target param shape is 4096 32768 (134217728). 
To learn this layer's parameters from scratch rather than copying from a saved 
net, rename the layer.

其要点是,他们的模型期望该图层的大小为1x1x4096,而我的仅为4096。但是我不知道如何更改此图层?

我在Users Google小组中找到了这个答案,指示我在复制之前进行网络外科手术以重塑预先训练的模型,但为此,我需要lmdb原始架构的数据层中的文件,而我没有这些文件当我尝试运行网络手术脚本时会引发错误)。


问题答案:

问题不在于4096,而在于25088。您需要根据输入要素图为网络的每一层计算输出要素图。请注意,该fc图层采用固定大小的输入,因此上conv一层的输出必须与该fc图层所需的输入大小匹配。conv使用上一层的输入要素图大小来计算fc6输入要素图大小(这是上一层的输出特征图)conv。公式如下:

H_out = ( H_in + 2 x Padding_Height - Kernel_Height ) / Stride_Height + 1
W_out = (W_in + 2 x Padding_Width - Kernel_Width) / Stride_Width + 1


 类似资料:
  • -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

  • 我正在尝试使用 VGG16 编码器构建 U-Net 模型。这是模型代码。 我收到以下错误。 ValueError:图断开连接:无法获取张量张量的值("input_1: 0",形状=(无,512,512,3),dtype=float32)在层"input_1"。 注意:是VGG16型号的输入层

  • 本文向大家介绍Keras使用ImageNet上预训练的模型方式,包括了Keras使用ImageNet上预训练的模型方式的使用技巧和注意事项,需要的朋友参考一下 我就废话不多说了,大家还是直接看代码吧! 在以上代码中,我们首先import各种模型对应的module,然后load模型,并用ImageNet的参数初始化模型的参数。 如果不想使用ImageNet上预训练到的权重初始话模型,可以将各语句的中

  • 我希望使用AWS Sagemaker工作流部署一个预训练的模型,用于实时行人和/或车辆检测,我特别想使用Sagemaker Neo编译模型并将其部署在边缘。我想从他们的模型动物园中使用OpenVino的预构建模型之一,但是当我下载模型时,它已经是他们自己的优化器的中间表示(IR)格式。 > 如果没有,是否有任何免费的预训练模型(使用任何流行的框架,如pytorch,tenorflow,ONXX等)

  • 问题内容: 我的训练数据的格式为(?,15)其中?是可变长度。 创建模型时,请指定以下内容: 我的训练数据的形状为(35730,?,15)。 在python中检查这个我得到: 输出:(35730,) 输出:(513,15) 当我尝试根据训练数据拟合模型时,出现ValueError: 我只能在单个样本上使用model.train_on_batch()来训练模型。 我该如何解决?似乎keras认为我的

  • 文章信息 通过本教程,你可以掌握技能:使用预先训练的词向量和卷积神经网络解决一个文本分类问题 本文代码已上传到Github 本文地址:http://blog.keras.io/using-pre-trained-word-embeddings-in-a-keras-model.html 本文作者:Francois Chollet 什么是词向量? ”词向量”(词嵌入)是将一类将词的语义映射到向量空间