【神经网络与深度学习】Caffe训练执行时爆出的Check failed: registry.count(t ype) == 1 (0 vs. 1) Unknown layer type
自己建立一个工程,希望调用libcaffe.lib ,各种配置好,也能成功编译,但是运行就会遇到报错
F0519 14:54:12.494139 14504 layer_factory.hpp:77] Check failed: registry.count(t ype) == 1 (0 vs. 1) Unknown layer type: Input (known types: Input )
各种跟踪调试都找不到原因,相同的代码在microsoft版本的caffe里使用就没有问题,自己新建一个项目就出错。
网上找了一下原因,大概是libcaffe.lib是静态库的方式编译的,有一些东西没法使用,暂时只能肤浅的这么理解。我试过改成动态库,编译都通不过了。
一些参考方案:
http://stackoverflow.com/questions/30325108/caffe-layer-creation-failure
http://stackoverflow.com/questions/32416226/create-layer-error-at-layer-factory-hpp
https://groups.google.com/forum/#!topic/caffe-users/Py6IwMQvtqo/discussion
尝试了不少,都不怎么给力。
我甚至在github项目下提问
官方答复是只能在解决方案里面新建项目。
当然,最后我找到了一个办法,
一开始没有太看明白这是什么意思。
后来仔细看了一下libcaffe工程的目录结构,发现有个layer目录,里面放的都是各种层,什么ArgMaxLayer,ScaleLayer,当然也有InputLayer,感觉很有可能问题就出在这些代码里面,仔细阅读input_layer.cpp,果然发现有一句
INSTANTIATE_CLASS(InputLayer);  
REGISTER_LAYER_CLASS(Input);
所以解决方案就是,新建一个头文件,例如head.h,将他提示你没有的层的头文件包含进去,在添加类似于
extern INSTANTIATE_CLASS(InputLayer);的这句话
后来发现有的层添加了也会报错,那是因为他们没有类似于REGISTER_LAYER_CLASS(Input);这句话。可以想象,REGISTER_LAYER_CLASS这句话作用就是注册layer。
可以添加进去。
我贴上我的head.h,添加了我使用到的layer
#include "caffe/common.hpp"  
#include "caffe/layers/input_layer.hpp"  
#include "caffe/layers/inner_product_layer.hpp"  
#include "caffe/layers/dropout_layer.hpp"  
#include "caffe/layers/conv_layer.hpp"  
#include "caffe/layers/relu_layer.hpp"  
  
#include "caffe/layers/pooling_layer.hpp"  
#include "caffe/layers/lrn_layer.hpp"  
#include "caffe/layers/softmax_layer.hpp"  
  
  
namespace caffe  
{  
  
    extern INSTANTIATE_CLASS(InputLayer);  
    extern INSTANTIATE_CLASS(InnerProductLayer);  
    extern INSTANTIATE_CLASS(DropoutLayer);  
    extern INSTANTIATE_CLASS(ConvolutionLayer);  
    REGISTER_LAYER_CLASS(Convolution);  
    extern INSTANTIATE_CLASS(ReLULayer);  
    REGISTER_LAYER_CLASS(ReLU);  
    extern INSTANTIATE_CLASS(PoolingLayer);  
    REGISTER_LAYER_CLASS(Pooling);  
    extern INSTANTIATE_CLASS(LRNLayer);  
    REGISTER_LAYER_CLASS(LRN);  
    extern INSTANTIATE_CLASS(SoftmaxLayer);  
    REGISTER_LAYER_CLASS(Softmax);  
  
}
---
added by ZhangPY 2016-9-14 23:21
注意,这里我的调试过程中还出现了注册过再次注册的错误,但是去掉自己添加的注册后,又爆出没有注册,所以我索性直接将caffelib源码中的layer.hpp中的注册部分给注释掉了,然后用我自己的地方去注册它,这样就不再出现问题了。
你所使用的layer可能跟我不一样,但是解决方法是一样的,提示哪个layer找不到,就把那个layer添加进来就是了。
彻底一点的方案是把所有的layer全写进来。
我在添加过程中,之前在每个extern INSTANTIATE_CLASS 后面都添加 REGISTER_LAYER_CLASS,结果报错,说重复注册。于是删掉了。
所以,如果你以后遇到没有注册的layer,就照上面做就好了,万一遇到重复注册,也应该会举一反三,知道如何解决,例如把判断重复注册的语句修改一下等等。
【神经网络与深度学习】Caffe训练执行时爆出的Check failed: registry.count(t ype) == 1 (0 vs. 1) Unknown layer type的更多相关文章
- windows7下解决caffe check failed registry.count(type) == 1(0 vs. 1)  unknown layer type问题
		
在Windows7下调用vs2013生成的Caffe静态库时经常会提示Check failed: registry.count(type) == 1 (0 vs. 1) Unknown layer t ...
 - [神经网络与深度学习][计算机视觉]SSD编译时遇到了json_parser_read.hpp:257:264: error: ‘type name’ declared as function ret
		
运行make之后出现如下错误: /usr/include/boost/property_tree/detail/json_parser_read.hpp:257:264: error: 'type n ...
 - 【神经网络与深度学习】【CUDA开发】【VS开发】Caffe+VS2013+CUDA7.5+cuDNN配置过程说明
		
[神经网络与深度学习][CUDA开发][VS开发]Caffe+VS2013+CUDA7.5+cuDNN配置过程说明 标签:[Qt开发] 说明:这个工具在Windows上的配置真的是让我纠结万分,大部分 ...
 - 【神经网络与深度学习】caffe静态链接库“Unknown layer type: Convolution (known types: )”和“ 磁盘空间不足”问题的解决办法
		
这一段时间把caffe在windows环境下编译了一下,tool里面的cpp全部编译成了exe.再用的时候有两个问题让我头疼了好长时间! 第一个问题 "db_lmdb.hpp:14] Che ...
 - 人工智能深度学习Caffe框架介绍,优秀的深度学习架构
		
人工智能深度学习Caffe框架介绍,优秀的深度学习架构 在深度学习领域,Caffe框架是人们无法绕过的一座山.这不仅是因为它无论在结构.性能上,还是在代码质量上,都称得上一款十分出色的开源框架.更重要 ...
 - 【神经网络与深度学习】【Qt开发】【VS开发】从caffe-windows-visual studio2013到Qt5.7使用caffemodel进行分类的移植过程
		
[神经网络与深度学习][CUDA开发][VS开发]Caffe+VS2013+CUDA7.5+cuDNN配置成功后的第一次训练过程记录<二> 标签:[神经网络与深度学习] [CUDA开发] ...
 - [源码解析] 深度学习分布式训练框架 Horovod (1) --- 基础知识
		
[源码解析] 深度学习分布式训练框架 Horovod --- (1) 基础知识 目录 [源码解析] 深度学习分布式训练框架 Horovod --- (1) 基础知识 0x00 摘要 0x01 分布式并 ...
 - [源码解析] 深度学习分布式训练框架 horovod (7) --- DistributedOptimizer
		
[源码解析] 深度学习分布式训练框架 horovod (7) --- DistributedOptimizer 目录 [源码解析] 深度学习分布式训练框架 horovod (7) --- Distri ...
 - [源码解析] 深度学习分布式训练框架 horovod (16) --- 弹性训练之Worker生命周期
		
[源码解析] 深度学习分布式训练框架 horovod (16) --- 弹性训练之Worker生命周期 目录 [源码解析] 深度学习分布式训练框架 horovod (16) --- 弹性训练之Work ...
 
随机推荐
- 吴恩达+neural-networks-deep-learning+第二周作业
			
Logistic Regression with a Neural Network mindset v4 简单用logistic实现了猫的识别,logistic可以被看做一个简单的神经网络结构,下面是 ...
 - PHP中变量声明和定义的区别
			
先记录一下(不知道PHP是不是一样,但是C语言是这样的):把建立空间的声明称之为“定义”,而把不需要建立存储空间的声明称之为“声明”.声明的最终目的是为了提前使用,即在定义之前使用,如果不需要提前使用 ...
 - Ubuntu下搜狗输入法乱码(二)
			
本文适用于Ubuntu 16.04,造冰箱的大熊猫@cnblogs 2018/10/25 搜狗输入法时不时出现候选字乱码的问题.参照网上所说的修改Fcitx配置中的简体中文和繁体中文转换配置的方法,无 ...
 - HGOI 20190822  OCWA提高组模拟赛二
			
Problem A 快递 根节点为$1$ , 含有$n$个节点的树,每一条边都有一段开放的时间$[s_i,e_i]$,和经过需要的时间. 有$q$组询问,每一次在时刻$t_i$出发从根节点出发走到第$ ...
 - 如何将项目托管到Github上
			
将本地项目放到GitHub上托管并展示 传送门 利用Github Pages展示自己的项目 传送门 git Please tell me who you are解决方法 传送门 git config ...
 - 利用jquery动态添加和删除表格的一行,并且保存单行数据
			
开发时遇到一个需求:要求要在页面的表格可以添加和删除一行,并能填写对应的数据后保存这一行数据. HTML代码 界面使用了freemarker框架,teams是后台传过来的list类型数据 <fo ...
 - 并发编程--Concurrent-工具类介绍
			
并发编程--Concurrent-工具类介绍 并发编程--Concurrent-工具类介绍 CountDownLatch CylicBarrier Semaphore Condition 对象监视器下 ...
 - kotlin  简单处理 回调参数 加?
			
Kotlin Parameter specified as non-null is null 2017年10月18日 17:21:49 amiko_ 阅读数:9017 版权声明:本文为博主原创文 ...
 - better-scroll 滑动插件的使用
			
better-scroll 滑动插件的使用 拥有的效果:下拉刷新.上拉加载.滑动.轮播
 - CNN入门讲解-为什么要有最后一层全连接?
			
原文地址:https://baijiahao.baidu.com/s?id=1590121601889191549&wfr=spider&for=pc 今天要说的是CNN最后一层了,C ...