【问题标题】:Caffe GoogleNet classification.cpp gives random outputsCaffe GoogleNet classification.cpp 提供随机输出
【发布时间】:2016-11-13 17:08:03
【问题描述】:

我使用 Caffe GoogleNet 模型来训练我自己的数据(10k 图像,2 个类)。我在第 400000 次迭代时停止它,准确度约为 80%。

如果我运行以下命令:

./build/examples/cpp_classification/classification.bin
  models/bvlc_googlenet/deploy.prototxt  
  models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel 
  data/ilsvrc12/imagenet_mean.binaryproto
  data/ilsvrc12/synset_words.txt
  1.png

它每次都会给我一个不同的——显然是随机的——结果(即,如果我运行它 n 次,那么我会得到 n 个不同的结果)。为什么?我的训练失败了吗?它是否仍然使用参考模型中的旧数据?

【问题讨论】:

  • 10k 图像对于从头开始训练 ConvNet 来说真的不是很多。您是否尝试过微调其他模型?

标签: c++ computer-vision neural-network deep-learning caffe


【解决方案1】:

我不认为这是培训的问题。即使训练数据不是,它也应该每次都给出相同的(可能是错误的)输出。如果您得到随机结果,则表明权重未正确加载。

当您根据 .prototxt 加载 .caffemodel 时,caffe 将加载 prototxt 中名称与 caffemodel 中的名称匹配的所有层的权重。对于其他层,它将进行随机初始化(高斯 xavier 等根据 prototxt 中的规范)。

因此,您现在最好的做法是检查模型是否使用您现在使用的相同 prototxt 进行训练。

我看到您正在使用 GoogleNet prototxt 和 reference_caffenet caffemodel。这是故意的吗?

【讨论】:

    【解决方案2】:

    当你想部署微调模型时,你应该检查两个主要的事情:

    1. 输入:
    • 输入图像使用BGR 通道而不是RGB(例如opencv)
    • 平均文件:训练时和平均文件一样吗?
    1. Prototxt:
    • 在微调模型时,会更改原始prototxt中某些层的名称,请检查是否使用了相同的层名称?

    还有一些 Fine-tune tricksCS231n_transfer_learning 这对于微调非常有用。

    【讨论】:

      猜你喜欢
      • 2015-08-29
      • 1970-01-01
      • 1970-01-01
      • 2017-10-30
      • 2016-08-27
      • 2019-01-16
      • 1970-01-01
      • 2016-10-25
      • 2017-05-08
      相关资源
      最近更新 更多