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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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