caffe训练时候的 unknow solver type /unknown layer type错误

改进办法承接上一篇博文。这里主要记录一下解决的思路。

问题原因:好像是一些层的注册问题。

解决办法:

1. 写一个头文件,名称为caffe_reg.h,内容如下:

#pragma once
#ifndef CAFFE_REG_H
#define CAFFE_REG_H

//layer
#include 
#include
#include
#include
#include
#include
#include
//#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
//#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include

#include //sphereface中独有的层

//#include
//solver
#include


namespace caffe
{

    // 2 layer, 很奇怪,其他57个层可以通过extern,但这两个需要添加注册才可以。
    //extern INSTANTIATE_CLASS(DataLayer);
    //extern INSTANTIATE_CLASS(ParameterLayer);
    REGISTER_LAYER_CLASS(Data);
    REGISTER_LAYER_CLASS(Parameter);

    // 57 layers
    extern INSTANTIATE_CLASS(ConvolutionLayer);
	REGISTER_LAYER_CLASS(Convolution);
    extern INSTANTIATE_CLASS(PoolingLayer);
    extern INSTANTIATE_CLASS(LRNLayer);
    extern INSTANTIATE_CLASS(ReLULayer);
    extern INSTANTIATE_CLASS(SigmoidLayer);
    extern INSTANTIATE_CLASS(SoftmaxLayer);
	REGISTER_LAYER_CLASS(Softmax);
    extern INSTANTIATE_CLASS(TanHLayer);
    //extern INSTANTIATE_CLASS(PythonLayer);
    extern INSTANTIATE_CLASS(AbsValLayer);
    extern INSTANTIATE_CLASS(AccuracyLayer);
    extern INSTANTIATE_CLASS(ArgMaxLayer);
    extern INSTANTIATE_CLASS(BatchNormLayer);
    extern INSTANTIATE_CLASS(BatchReindexLayer);
    extern INSTANTIATE_CLASS(BiasLayer);
    extern INSTANTIATE_CLASS(BNLLLayer);
    extern INSTANTIATE_CLASS(ConcatLayer);
    extern INSTANTIATE_CLASS(ContrastiveLossLayer);
    extern INSTANTIATE_CLASS(CropLayer);


    extern INSTANTIATE_CLASS(DeconvolutionLayer);
    extern INSTANTIATE_CLASS(DropoutLayer);
    extern INSTANTIATE_CLASS(DummyDataLayer);
    extern INSTANTIATE_CLASS(EltwiseLayer);
    extern INSTANTIATE_CLASS(ELULayer);
    extern INSTANTIATE_CLASS(EmbedLayer);
    extern INSTANTIATE_CLASS(EuclideanLossLayer);
    extern INSTANTIATE_CLASS(ExpLayer);
    extern INSTANTIATE_CLASS(FilterLayer);
    extern INSTANTIATE_CLASS(FlattenLayer);
    extern INSTANTIATE_CLASS(HDF5DataLayer);
    extern INSTANTIATE_CLASS(HDF5OutputLayer);
    extern INSTANTIATE_CLASS(HingeLossLayer);
    extern INSTANTIATE_CLASS(Im2colLayer);
    extern INSTANTIATE_CLASS(ImageDataLayer);
    extern INSTANTIATE_CLASS(InfogainLossLayer);
    extern INSTANTIATE_CLASS(InnerProductLayer);
    extern INSTANTIATE_CLASS(InputLayer);
    //extern INSTANTIATE_CLASS(LogLayer);
    extern INSTANTIATE_CLASS(LSTMLayer);
    extern INSTANTIATE_CLASS(LSTMUnitLayer);
    extern INSTANTIATE_CLASS(MemoryDataLayer);
    extern INSTANTIATE_CLASS(MultinomialLogisticLossLayer);
    extern INSTANTIATE_CLASS(MVNLayer);
    extern INSTANTIATE_CLASS(PowerLayer);
    extern INSTANTIATE_CLASS(PReLULayer);
    extern INSTANTIATE_CLASS(ReductionLayer);
    extern INSTANTIATE_CLASS(ReshapeLayer);
    extern INSTANTIATE_CLASS(RNNLayer);
    extern INSTANTIATE_CLASS(ScaleLayer);
    extern INSTANTIATE_CLASS(SigmoidCrossEntropyLossLayer);
    extern INSTANTIATE_CLASS(SilenceLayer);
    extern INSTANTIATE_CLASS(SliceLayer);
    extern INSTANTIATE_CLASS(SoftmaxWithLossLayer);
    extern INSTANTIATE_CLASS(SplitLayer);
    extern INSTANTIATE_CLASS(SPPLayer);
    extern INSTANTIATE_CLASS(ThresholdLayer);
    extern INSTANTIATE_CLASS(TileLayer);
    extern INSTANTIATE_CLASS(WindowDataLayer);

	extern INSTANTIATE_CLASS(MarginInnerProductLayer);
	REGISTER_LAYER_CLASS(MarginInnerProduct);

    // 6 sovlers
    extern INSTANTIATE_CLASS(AdaDeltaSolver);
    extern INSTANTIATE_CLASS(AdaGradSolver);
    extern INSTANTIATE_CLASS(AdamSolver);
    extern INSTANTIATE_CLASS(NesterovSolver);
    extern INSTANTIATE_CLASS(RMSPropSolver);
    extern INSTANTIATE_CLASS(SGDSolver);
}

#endif

实现的功能主要是注册某些需要的层,例如刚开始冒出来的"unknown solver type SGD"错误,在加入6 solvers以后,就不会再报错了。后面又报出来的"unknown layer type"错误,只要在57个layers中包含需要的层就行,如果哪一层没有注册,就用REGISTER_LAYER_CLASS(Softmax)这样修改,类似第88、89行的注册层的写法。

2. 将caffe.reg.h保存到(caffe项目根目录)/include/caffe/caffe_reg.h中,并在此目录下的caffe.hpp中包含这个caffe_reg.h。

3. 重新编译caffe.lib。

4. 将编译好的caffe.lib改名,我改为caffe_r.lib。

5. 将caffe.bin属性的 链接器->输入中包含的caffe.lib改为caffe_r.lib。为防止“输出文件名匹配输入文件名”的错误。

6. 编译caffe.bin生成caffe.exe。

7. 调用caffe.exe,进行训练。

 

-------------------------------------------------------------------

2019.2.13更新

-------------------------------------------------------------------

https://blog.csdn.net/raby_gyl/article/details/63262374,这个博客需要重点关注一下,其中说明的关于重复注册问题的代码改正部分。

 

你可能感兴趣的:(算法学习,caffe)