Caffe入门介绍及学习笔记

一、Caffe基础

1、Caffe主要依赖项

  • CUDA(Compute Unified Device Architecture),是英伟达公司推出的一种基于新的并行编程模型和指令集架构的通用计算架构,它能利用英伟达GPU的并行计算引擎,比CPU更高效的解决许多复杂计算任务。
  • NVIDIA cuDNN是用于深度神经网络的GPU加速库。它强调性能、易用性和低内存开销。
  • Opencv. (Linux下查看版本:pkg-config --modversion opencv)

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

3、数据及其导数以blobs的形式在层间流动。每一层用bottom来输入数据,用top来输出数据。Caffe层的定义由2部分组成:层属性与层参数。

4、Slice layer用来做multi-task或者multi-label学习,将一个Vector分成多个Vector。Slience层用来接收slice出的不需要的层,使其不被打印出来。

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

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

 6、关于可视化:https://blog.csdn.net/BockSong/article/details/81979822

二、Caffe编译

初次安装caffe,或是修改caffe源码后,都需要进行编译。编译时首先要准备好所需的依赖项,然后生成并根据需要修改makefile和makefile.config文件。

之后执行如下指令:

make clean
make all

编译中遇到了一些问题,解决过程记录在另一篇博客:https://blog.csdn.net/BockSong/article/details/81738610

三、数据处理

Caffe支持三种数据库格式:LevelDB, LMDB, HDF5。

LMDB文件操作可以参考:https://blog.csdn.net/BockSong/article/details/81238276

四、配置文件编写

1、solver.prototxt

net: "examples/AAA/train_val.prototxt"   #训练或者测试配置文件
test_iter: 40   #完成一次测试需要的迭代次数
test_interval: 475  #测试间隔
base_lr: 0.01  #基础学习率
lr_policy: "step"  #学习率变化规律
gamma: 0.1  #学习率变化指数
stepsize: 9500  #学习率变化频率
display: 20  #屏幕显示间隔
max_iter: 47500 #最大迭代次数
momentum: 0.9 #动量
weight_decay: 0.0005 #权重衰减
snapshot: 5000 #保存模型间隔
snapshot_prefix: "models/A1/caffenet_train" #保存模型的前缀
solver_mode: GPU #是否使用GPU

2、train_val.prototxt

train_val.prototxt文件是网络配置文件。该文件是在训练的时候用的。

3、deploy.prototxt

该文件是在测试时使用的文件。

相关资料:

makefile.config  https://blog.csdn.net/jiajunlee/article/details/52068230

makefile  https://blog.csdn.net/thystar/article/details/50837750

五、Python接口

1、net.blobs解析

其类型是 collections.OrderedDict(即有序字典),字典的值类型为 caffe._caffe.Blob,caffe._caffe.Blob 的 data 属性类型是 numpy.ndarray。
在 Caffe 的 python/caffe/_caffe.cpp 文件中:
.add_property("data",  bp::make_function(&Blob<Dtype>::mutable_cpu_data,
NdarrayCallPolicies()))
在 Caffe 的 src\caffe\blob.cpp 文件中
template <typename Dtype>
Dtype* Blob<Dtype>::mutable_cpu_data() {
CHECK(data_);
return static_cast<Dtype*>(data_->mutable_cpu_data());
}

2、中间层的可视化

读取网络的结构(每层的名字以及相应层的参数)。net.blob对应网络每一层数据,对于每一层,都是四个维度:(batch_size, channel_dim, height, width)。

# 循环打印每一层名字和相应维度
for layer_name, blob in net.blobs.iteritems():
    print layer_name + '\t' + str(blob.data.shape) 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值