C++ Caffe GoogleNet CLASSION.cpp提供随机输出

C++ Caffe GoogleNet CLASSION.cpp提供随机输出,c++,computer-vision,neural-network,deep-learning,caffe,C++,Computer Vision,Neural Network,Deep Learning,Caffe,我使用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/

我使用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个不同的结果)。为什么?我的训练失败了吗?它仍然使用参考模型中的旧数据吗?

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

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

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


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

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

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

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


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

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

  • 投入:
    • 输入图像使用通道而不是RGB(例如opencv)
    • 平均档案:培训时与平均档案相同吗
  • :
    • 在微调模型时,您将更改原始prototxt中某些层的名称,并且您应该检查是否使用了相同的层名称
    还有一些
    这对于微调非常有用。

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

  • 投入:
    • 输入图像使用通道而不是RGB(例如opencv)
    • 平均档案:培训时与平均档案相同吗
  • :
    • 在微调模型时,您将更改原始prototxt中某些层的名称,并且您应该检查是否使用了相同的层名称
    还有一些
    这对于微调非常有用。

    10k图像对于从头开始训练ConvNet来说真的不是很多。你试过对另一个模型进行微调吗?从零开始训练ConvNet,10k图像真的不是很多。你试过微调另一个型号吗?