Machine learning GoogLeNet模型的微调
我从零开始训练GoogLeNet模型。但它并没有给我带来有希望的结果。Machine learning GoogLeNet模型的微调,machine-learning,computer-vision,neural-network,deep-learning,caffe,Machine Learning,Computer Vision,Neural Network,Deep Learning,Caffe,我从零开始训练GoogLeNet模型。但它并没有给我带来有希望的结果。 作为替代方案,我想在我的数据集上对GoogLeNet模型进行微调。有人知道我应该遵循哪些步骤吗 假设您正在尝试进行图像分类。以下是微调模型的步骤: 1.分类层 原始输出1000个类的预测值(它的mum\u输出设置为1000)。您需要将其替换为具有适当num\u输出的新层。替换分类层: 更改图层名称(以便从caffemodel文件读取原始权重时,不会与该图层的权重发生冲突) 将num\u output更改为要预测的正确输出类数
作为替代方案,我想在我的数据集上对GoogLeNet模型进行微调。有人知道我应该遵循哪些步骤吗 假设您正在尝试进行图像分类。以下是微调模型的步骤: 1.分类层 原始输出1000个类的预测值(它的
mum\u输出设置为1000)。您需要将其替换为具有适当num\u输出的新层。替换分类层:
更改图层名称(以便从caffemodel文件读取原始权重时,不会与该图层的权重发生冲突)
将num\u output
更改为要预测的正确输出类数
请注意,您需要更改所有分类图层。通常只有一个,但GoogLeNet碰巧有三个:,和
2.资料
您需要使用要微调的新标签创建一个新的训练数据集。例如,请参见如何创建lmdb数据集
3.您需要多大范围的微调?
微调模型时,可以训练所有模型的权重,也可以选择固定某些权重(通常是较低/较深层的过滤器),只训练最顶层的权重。这一选择取决于您,通常取决于可用的训练数据量(示例越多,您可以调整的权重就越多)。
每个层(包含可训练参数)都有param{lr_mult:XX}
。该系数确定这些权重对SGD更新的敏感程度。设置param{lr_mult:0}
意味着您固定此层的权重,并且在训练过程中不会更改这些权重。
相应地编辑您的train_val.prototxt
4.经营咖啡馆
运行caffe列车
,但提供caffe模型重量作为初始重量:
~$ $CAFFE_ROOT/build/tools/caffe train -solver /path/to/solver.ptototxt -weights /path/to/orig_googlenet_weights.caffemodel
与过去的手动功能相比,微调是一个非常有用的技巧,可以获得很好的精度。已经发布了一个使用Caffe微调Googlenet的好教程,所以我只想给出一些针对一般情况的微调建议和技巧
在大多数情况下,我们面临一个任务分类问题,新数据集(例如or)有以下四种常见情况:
新数据集很小,与原始数据集相似
新数据集很小,但与原始数据集不同(大多数情况下)
新数据集很大,与原始数据集相似
新数据集较大,但与原始数据集不同
在实践中,大多数情况下,我们没有足够的数据从头开始训练网络,但对于预先训练的模型可能已经足够了。不管我在上面提到什么样的情况,我们唯一需要关心的是,我们有足够的数据来训练CNN吗
如果是的话,我们可以从头开始训练CNN。然而,在实践中,从预先训练的模型初始化权重仍然是有益的
如果没有,我们需要检查数据是否与原始数据集非常不同?如果非常相似,我们可以微调完全连接的神经网络或。但是,如果它与原始数据集有很大不同,我们可能需要。非常感谢您的回复。你能告诉我怎样才能得到预先训练过的GoogLeNet模型吗?我使用下面给出的链接下载了经过预培训的模型@AshutoshSingla在caffe模型zooI中做了精细的调整,但结果并不乐观。经过1000次迭代后,我只获得了50%的精度。我的训练数据集有3k个图像验证有1k个图像,评估有1k个图像。我将base_lr设置为0.001,max_itr设置为10000。这是正常的准确性还是我做错了什么?如果需要,我还可以分享我在文件中所做的更改@shai你有什么建议吗?@AshutoshSingla你得说得更具体些。如果你有新问题,你应该问。