- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 PyCaffe 实现受 VGG 16 层网络启发的神经网络。我想使用他们的 GitHub page 提供的预训练模型.通常这是通过匹配图层名称来实现的。
对于我的 "fc6"
层,我在 train.prototxt 文件中有以下定义:
layer {
name: "fc6"
type: "InnerProduct"
bottom: "pool5"
top: "fc6"
inner_product_param {
num_output: 4096
}
}
Here是 VGG-16 部署架构的原型(prototype)文件。请注意,他们的 prototxt 中的 "fc6"
与我的相同(除了学习率,但那是无关紧要的)。还值得注意的是,我的模型中的输入也都是相同的大小:3 channel 224x224px 图像。
我一直在关注this tutorial非常接近,给我一个问题的代码块如下:
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)
第一行加载我的求解器 prototxt,然后第二行从预训练模型 (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。但我不知道如何更改它?
我找到了 this answer在 Users Google 组中指示我进行网络手术以在复制之前 reshape 预训练模型,但为了做到这一点,我需要来自原始体系结构数据层的 lmdb
文件,我不需要没有(当我尝试运行 net surgery 脚本时它会抛出错误)。
最佳答案
问题不在于 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
关于python - 使用预训练 VGG-16 模型的 Caffe 形状不匹配错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36464923/
我已经使用 VGG 作为图像分类模型实现了图像字幕。我读过关于 YOLO 是一种快速图像分类和检测模型的文章,它主要用于多目标检测。但是对于图像字幕,我只想要类而不是边界框。 最佳答案 我完全同意 P
你能告诉我每层有多少个神经元吗?我觉得这将增进我对 VGG 正在发生的事情的理解。 让我们在这里使用这段代码只是为了得到一些具体的东西。 https://github.com/machrisaa/te
我的问题是如何将从预训练 Vgg16 模型加载的常量张量转换为 tf.Variable 张量?动机是我需要计算关于 Conv4_3 层内核的特定损失的梯度,但是,内核似乎设置为 tf.Constant
我正在使用使用 VGG(神经网络)的基于转移式的深度学习方法。后者适用于小尺寸(512x512 像素)的图像,但是当输入图像很大(尺寸 > 1500 像素)时它会提供失真的结果。该方法的作者建议将输入
我所做的是: from keras.applications.vgg16 import VGG16 from keras.layers import * from keras.models impor
我想知道是否可以将自定义模型添加到 keras 中的损失函数。例如: def model_loss(y_true, y_pred): inp = Input(shape=(128, 128,
我加载了预训练的 VGG 人脸 CNN 并成功运行。我想从第 3 层和第 8 层提取超列平均值。我正在关注关于从 here 中提取超列的部分。 .但是,由于 get_output 函数不起作用,我不得
我正在使用 Python 3.7.7 和 Tensorflow 2.1.0。 我想创建一个 VGG16 自动编码器网络,向它加载一个权重文件,然后获取它的编码器和解码器。 获取 VGG16 自编码器网
我有一个 VGG19 编码器,它接受 (256,256,3) 的输入图像 y 并返回维度 (32,32, 512) 的张量 来自 vgg 的 conv-4-1 层。我需要将其转换为 numpy 数组以
当使用 torchvision.models 模块加载预训练的 VGG 网络并使用它对任意 RGB 图像进行分类时,网络的输出在每次调用之间明显不同。为什么会这样?根据我的理解,VGG 前向传播的任何
我已关注this加载并运行预训练的 VGG 模型。但是,我试图从隐藏层中提取特征图,并尝试复制“提取任意特征图”部分 here 中的结果。 。我的代码如下: #!/usr/bin/python imp
我正在尝试使用来自 keras 的预训练 VGG 16。但我真的不确定输入范围应该是多少。 快速回答,这些颜色顺序中的哪些? RGB BGR 哪个范围? 0 到 255? 从大约 -125 平衡到大约
我正在使用包含 3k 图像的数据集从头开始训练 VGG-16 模型。 我使用 Tensorflow 平台和 8 个 CPU,没有任何 GPU。 训练率 - 0.01, 重量衰减 - 0.0005, 动
这个问题是对 this answer 评论中讨论的跟进。 . 据我了解,preprocess_input() function 确实意味着输入图像的减法和 std-dev dvision。平均值是在训
刚接触pytorch,想用Vgg做迁移学习。我想删除全连接层并添加一些新的全连接层。我还想使用灰度输入而不是 RGB 输入。为此,我将添加输入层的权重并获得单个权重。所以三个 channel 的权重会
我使用 VGG16 基础创建了一个自定义 Keras 模型,并对其进行训练和保存: from keras.applications import VGG16 from keras import mod
我正在尝试打印所有已知类别及其概率值。第一个值是概率最高的类别。 这是迄今为止我的代码: from keras.applications.vgg16 import VGG16 from keras.p
我试图将具有以下形状的数据拟合到预训练的 keras vgg19 模型中。 图像输入形状为(32383, 96, 96, 3)标签形状为 (32383, 17)我收到了这个错误 expected bl
我正在使用预先训练的 VGG-16 网络将图像转换为特征。我可以按顺序完成这个工作。但是,我想并行执行此操作,但我不确定如何正确构建批处理。 具体来说,假设我加载了 16 个保存在 numpy 数组中
我实际上正在尝试使用 Keras 获得 VGG16 的顺序模型版本。功能版本可以通过以下方式获得: from __future__ import division, print_function im
我是一名优秀的程序员,十分优秀!