Caffe Net Surgery是否需要微调?

我是Caffe的新手,我想使用已经训练好的caffeNet模型来处理ImageNet数据。我通过移除中间的卷积层conv4进行了网络手术。

'layer {     name: "relu3"     type: "ReLU"     bottom: "conv3"     top: "conv3" } layer {     name: "relu5-new"     type: "ReLU"     bottom: "conv5-new"     top: "conv5-new" } layer {     name: "pool5-new"     type: "Pooling"     bottom: "conv5-new"     top: "pool5-new"     pooling_param {         pool: MAX         kernel_size: 3         stride: 2      } } layer {     name: "fc6"     type: "InnerProduct"     bottom: "pool5-new"     top: "fc6"     inner_product_param {     num_output: 4096     } }'

完整的prototxt文件可在此处找到

保存这个新网络后,准确率变为0。我应该在ImageNet验证集上进行微调,还是我的新prototxt文件有问题?

任何帮助都将不胜感激!


回答:

你最初使用的网络在conv3conv5之间有conv4层:这意味着conv5的滤波器(权重)期望接收特定数量的输入以及输入的特定“顺序”或“含义”。一旦你移除了conv4,你就必须调整conv5以接受不同数量的输入。因此,新的conv5必须经过训练以适应它接收到的新输入。
在这种情况下,当你引入新的conv5层时,你应该在prototxt中定义weight_filler来指导Caffe如何初始化新的权重。否则,Caffe会将权重设置为零,在这种情况下几乎不可能进行微调。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注