深度学习2:Caffe问题汇总(不定期更细)

#CNN错误汇总(遇到就更新)

问题1:

import caffe 时出现 no moudle named _caffe

  1.到caffe根目录下 sudo make pycaffe
  2.然后添加caffe路径
  import sys
  sys.path.append('caffe_root/python')# caffe_root是caffe的安装目录

问题2:

import lmdb 时出现 no moudle named lmdb

  sudo pip install lmdb

防止因为链接不顺畅导致下载失败,可以使用国内镜像进行加速

  sudo pip install lmdb -i http://pypi.douban.com/simple

问题3:

**import * 时出现 no moudle named ***

利用sys添加对应模块的父目录即可

问题4:

caffe.pb.h丢失问题:

fatal error: caffe/proto/caffe.pb.h: No such file or directory

解决方法: 用protoc从caffe/src/caffe/proto/caffe.proto生成caffe.pb.h和caffe.pb.cc
li@li:~/caffe/src/caffe/proto$ protoc --cpp_out=/home/li/caffe/include/caffe/ caffe.proto 

问题5:

链接错误*

/usr/bin/ld: caffe_cnn_handler.o: undefined reference to symbol ‘_ZNSs4_Rep10_M_destroyERKSaIcE@@GLIBCXX_3.4’
//usr/lib/x86_64-linux-gnu/libstdc++.so.6: error adding symbols: DSO missing from command line

解决方法: 是找不到libstdc++.so.6,解决方法是在Makefile中加入:
LIBS += -L/usr/lib/x86_64-linux-gnu -lstdc++

问题6:

在使用网络预测图像时,
prediction = net.predict( [input_image] )
出现: net.image_dims[0] 不是整数情况,

(1).甚至以为np.zeros()出现错误!最后发现
原因:net.image_dims 
Out[25]: '/home/wishchin/caffe-master/python/caffe/imagenet/ilsvrc_2012_mean.npy'

(2).出错原因:mean_file= caffe_root+"Python/caffe/imagenet/ilsvrc_2012_mean.npy"
        引用了错误的文件
因此在初始化Net的时候不引用MeanFIle就可以:
net = caffe.Classifier(Model_File,PreTrained,mean_file,channel_swap=(2,1,0 )  , input_scale=255);
修改为:
net = caffe.Classifier(Model_File,PreTrained);
可以运行!

问题7:

Caffe出现了IndexError: tuple index out of range问题;
prediction = net.predict( input_image )#prediction = net.predict( ImageFile )
File “/home/wishchin/caffe-master/python/caffe/classifier.py”, line 69, in predict
inputs[0].shape[2] ),
IndexError: tuple index out of range

原因找出来了:prediction = net.predict( input_image )
忘记 了填入列表,应该修改为:
prediction = net.predict( [input_image ] )

问题8:

caffe中deploy文件中的input_shape的dim:10dim:3dim:32dim:32 参数含义
deploy 文件中的数据层更为
layer {
name: “data”
type: “Input”
top: “data”
input_param { shape: { dim: 10 dim: 3 dim: 32 dim: 32 } }
}hape: { dim: 10 dim: 3 dim: 32 dim: 32 }代表含义:

shape {
dim: 10 #num,对待识别样本进行数据增广的数量,可自行定义。一般会进行5次crop,之后分别flip。如果该值为10则表示一个样本会变成10个,之后输入到网络进行识别。如果不进行数据增广,可以设置成1
dim: 3 #通道数,表示RGB三个通道
dim: 32 #图像的长和宽,通过 *_train_test.prototxt文件中数据输入层的crop_size获取
dim: 32

详细解释:
dim:10 ——表示对待识别样本进行数据增广的数量,该值的大小可自行定义。但一般会进行5次crop,将整幅图像分为多个flip。该值为10则表示会将待识别的样本分为10部分输入到网络进行识别。如果相对整幅图像进行识别而不进行图像数据增广,则可将该值设置为1.

dim:3 ——该值表示处理的图像的通道数,若图像为RGB图像则通道数为3,设置该值为3;若图像为灰度图,通道数为1则设置该值为1.

dim:32 ——图像的长度,可以通过网络配置文件中的数据层中的crop_size来获取。

dim:32——图像的宽度,可以通过网络配置文件中的数据层中的crop_size来获取。

问题9:

No module named pydot

draw_net.py是出现此类错误

解决方法: sudo apt-get install python-pydot  


问题10:

No module named google.protobuf

fatal error: caffe/proto/caffe.pb.h: No such file or directory

解决方案:重新下载源码编译
参考 http://blog.csdn.net/qinglu000/article/details/17242011

问题11:

遇到的问题:
在利用cmake编译caffe时,出现如下错误:

Linking CXX shared library …/…/lib/libcaffe-d.so
/usr/bin/ld: /usr/local/lib/libcblas.a(cblas_sgemv.o): relocation R_X86_64_32 against `.rodata.str1.1’ can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/libcblas.a: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
make[2]: *** [lib/libcaffe-d.so.1.0.0-rc3] Error 1
make[1]: *** [src/caffe/CMakeFiles/caffe.dir/all] Error 2
make: *** [all] Error 2
解决方法:
http://blog.csdn.net/u013832707/article/details/52748944
修改cmakelists.txt
Atlas_CBLAS_LIBRARY:FILEPATH=/usr/lib/libcblas.so(自己本机上的目录)

原因分析:
应该是机器上利用不同方式多次装过这个库,文件较为混乱,找不到正确的库。所以大家安装的时候能使用apt-get install的尽量这样安装,除非你有明确的目的要源码安装,否则确实要做很多工作,很“锻炼”人。



问题12:

caffe支持C++11

if(UNIX OR APPLE)
set(CMAKE_CXX_FLAGS “${CMAKE_CXX_FLAGS} -std=c++11 -fPIC -Wall”)
endif()

问题13:

/usr/lib/gcc/x86_64-linux-gnu/4.8/include/stddef.h(432): error: identifier “nullptr” is undefined

/usr/lib/gcc/x86_64-linux-gnu/4.8/include/stddef.h(432): error: expected
a “;”

/usr/include/x86_64-linux-gnu/c++/4.8/bits/c++config.h(190): error:
expected a “;”

/usr/include/c++/4.8/exception(63): error: expected a “;”

/usr/include/c++/4.8/exception(68): error: expected a “;”

/usr/include/c++/4.8/exception(76): error: expected a “;”

/usr/include/c++/4.8/exception(83): error: expected a “;”

/usr/include/c++/4.8/exception(93): error: expected a “{”

/usr/include/c++/4.8/bits/exception_ptr.h(64): error: function
“std::current_exception” returns incomplete type
“std::__exception_ptr::exception_ptr”

—[ Dependencies
include(cmake/Dependencies.cmake)
list(APPEND CUDA_NVCC_FLAGS “-std=c++11”)

—[ Flags
if(UNIX OR APPLE)
set(CMAKE_CXX_FLAGS “${CMAKE_CXX_FLAGS} -std=c++11 -fPIC -Wall”)
endif()

#########################################################################################
Caffe是纯粹的C++/CUDA架构,支持命令行、Python和MATLAB接口;可以在CPU和GPU直接无缝切换:
Caffe::set_mode(Caffe::GPU);
原博文链接:点击进入
#Caffe的优势

1.上手快:模型与相应优化都是以文本形式而非代码形式给出。
2.Caffe给出了模型的定义、最优化设置以及预训练的权重,方便立即上手。
3.速度快:能够运行最棒的模型与海量的数据。
4.Caffe与cuDNN结合使用,测试AlexNet模型,在K40上处理每张图片只需要1.17ms
5.模块化:方便扩展到新的任务和设置上。
6.可以使用Caffe提供的各层类型来定义自己的模型。
7.开放性:公开的代码和参考模型用于再现。
8.社区好:可以通过BSD-2参与开发与讨论。

#Caffe的网络定义

Caffe中的网络都是有向无环图的集合,可以直接定义:

name: "dummy-net"
layers {name: "data" …}
layers {name: "conv" …}
layers {name: "pool" …}
layers {name: "loss" …}

数据及其导数以blobs的形式在层间流动。
#Caffe的各层定义

Caffe层的定义由 2 部分组成:层属性与层参数,例如

name:"conv1"
type:CONVOLUTION
bottom:"data"
top:"conv1"
convolution_param{
    num_output:20
    kernel_size:5
    stride:1
    weight_filler{
        type: "xavier"
    }
}

这段配置文件的前4行是层属性,定义了层名称、层类型以及层连接结构(输入blob和输出blob);而后半部分是各种层参数
#Blob

Blob是用以存储数据的4维数组,例如

    对于数据:Number*Channel*Height*Width
    对于卷积权重:Output*Input*Height*Width
    对于卷积偏置:Output*1*1*1

#训练网络

网络参数的定义也非常方便,可以随意设置相应参数。

甚至调用GPU运算只需要写一句话:

solver_mode:GPU

不论使用何种框架进行CNNs训练,共有3种数据集

Training Set:用于训练网络
Validation Set:用于训练时测试网络准确率
Test Set:用于测试网络训练完成后的最终正确率

Caffe生成的数据分为2种格式:Lmdb 和 Leveldb

它们都是键/值对(Key/Value Pair)嵌入式数据库管理系统编程库。
虽然 lmdb 的内存消耗是 leveldb 的1.1倍,但是 lmdb 的速度比 leveldb快10%至15%,更重要的是lmdb允许多种训练模型同时读取同一组数据集。
因此lmdb取代了leveldb成为Caffe默认的数据集生成格式。

#预处理图像的leveldb构建
输入:一批图像和label (2和3)
输出:leveldb (4)
指令里包含如下信息:
conver_imageset (构建leveldb的可运行程序)
train/ (此目录放处理的jpg或者其他格式的图像)
label.txt (图像文件名及其label信息)
输出的leveldb文件夹的名字
CPU/GPU (指定是在cpu上还是在gpu上运行code)

#CNN网络配置文件
Imagenet_solver.prototxt (包含全局参数的配置的文件)
Imagenet.prototxt (包含训练网络的配置的文件)
Imagenet_val.prototxt (包含测试网络的配置文件)

#CNN数据问题

1.编写程序将image和label转换成Datum格式,并写入lmdb
2.Data layer从lmdb中读取Datum格式的数据,然后转化成一个Batch
3.从Batch里面把image和label的数据复制到top的内存或显存
上述的2,3步可以查看data_layer.cpp,base_data_layer.cpp和base_data_layer.cu这三个文件,里面和float_data半点关系都没有,所以就算你把regression values保存在Datum的float_data里面,Data layer也不会把它读出来的。

你可能感兴趣的:(深度学习,深度学习)