快要毕业了,学习了一段时间的caffe,总想着写点什么,免得以后不用了,就忘了,辜负了自己这段时间的经历。
caffe是贾扬清及一干大神们开发的一款基于C++的深度学习框架,这个框架多用于计算机视觉相关的深度学习(目前除了jeffdonahue似乎还没有其他的RNN相关网络被收录),所以如果做自然语言等需要用到其他网络的、但是又不想自己写网络代码的同学建议再深入调研下,看caffe目前有没有收录相关网络。
Caffe的windows安装建议使用happynear编译好的,详细教程可以参看中文博客。Linux下的话,caffe的开源官网上有详细的教程,我就不班门弄斧了。
Caffe的运行十分简单,不用去深究源代码的运行机制,只需要对自己调用的网络所含参数进行设定就可以了。
首先需要设计网络层,网络层实际基本结构像一个无环图集合一样:比如
Name: “example-net”
Layer{name:”data”--------}
Layer{name:”conv”--------}
Layer{name:”pool” -------}
Layer{name:”loss”--------}
我们常用的卷积层定义可以为:
layer {
name:"conv1" #层名
type:"Convolution" #层类型
bottom:"data" #上层数据来源,注意:需要与某一层中的top名相同
top:"conv1" #输出数据名
param {
lr_mult: 1#参数
}
param {
lr_mult: 2#参数
}
convolution_param{ #卷积自带参数
num_output: 20
kernel_size: 5
stride: 1
weight_filler {
type:"xavier"
}
bias_filler {
type:"constant"
}
}
}
网络层设计好了,还需要写一个参数文件,一般是***_solver.prototxt
参数文件里面写入了需要调用的网络路径、是否需要测试、测试迭代次数、测试间隔次数、基础学习率、模型保存路径、使用GPU/CPU等一系列参数
# The train/test net protocol buffer definition
net: "examples/mnist/lenet_train_test.prototxt"
# test_iter specifies how many forward passes the testshould carry out.
# In the case of MNIST, we have test batch size 100 and100 test iterations,
# covering the full 10,000 testing images.
test_iter: 100
# Carry out testing every 500 training iterations.
test_interval: 500
# The base learning rate, momentum and the weight decayof the network.
base_lr: 0.01
momentum: 0.9
weight_decay: 0.0005
# The learning rate policy
lr_policy: "inv"
gamma: 0.0001
power: 0.75
# Display every 100 iterations
display: 100
# The maximum number of iterations
max_iter: 10000
# snapshot intermediate results
snapshot: 5000
snapshot_prefix: "examples/mnist/lenet"
# solver mode: CPU or GPU
solver_mode: GPU
训练网络,一般都是写一个脚本来调用设计好的网络来直接调用,脚本内容一般情况下如下:
.\bin\caffe.exe #调用的caffe程序
Train#是训练还是测试
--solver=data/coco/lrcn_solver.prototxt #网络路径
--weights=data/coco/mil_iter_70000.caffemodel #如果是微调,则有此部分,否则没有
--gpu 1#使用gpu编号
Pause
所以,简单的用caffe训练深度学习由三部分组成:
1:网络设计
2:参数设定文件
3:运行脚本