Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Machine learning GoogLeNet模型的微调_Machine Learning_Computer Vision_Neural Network_Deep Learning_Caffe - Fatal编程技术网

Machine learning 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模型。但它并没有给我带来有希望的结果。

作为替代方案,我想在我的数据集上对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你得说得更具体些。如果你有新问题,你应该问。