安装过程
1.基本配置
- Ubuntu 14.04 - Python 2.7 - Nvidia/caffe 0.15.1 - DIGITS 6.0.0 - Protobuf 3.2 - GCC4.8 - CUDA8.0+ CUDNN
安装过程不做赘述,任何困难上网古歌+github+stackoverflow解决。
2.MNIST案例运行
./digits/digits-deserver
下载mnist数据:
python -m digits.download_data mnist ~/mnist
打开浏览器输入host地址进入DIGITS主界面。
1. 单击:Login->DATASET->classification:选择本地mnist文件夹:image,lables和validation; 选择LeNet网络,输入model和group名创建dataset。
2. DIGITS(左上角logo)->model->classification:选择mnist文件夹同上;选择LeNet网络,输入mdol和group名进行训练。 可能会遇到的报错:
- 【 Check failed: error == cudaSuccess (8 vs. 0) invalid device function】计算力不匹配,打开makefile.config把CUDA_ARCH这一行comput值写成对应显卡计算力*10(e.g:3.0计算力->30)
- 【error code -11】更换protubuf版本,一般来说如果按照如上配置,则不需要更换。
- 【MEMO run out】显卡内存不够,减小batch_size的值或者换显卡
3.original.prototxt 解析
先打开original.prototxt文本,对比DIGITS里VISUALIZE产生的网络图:
从上往下看,流程:
- raw_data分两类train_data和val_data
1. layer:
name:train-data(层名)
type:Data(层数据类型)
top:data(实际是下一层是data,用于训练的数据包括val-data)
top:label(实际是下一层是label,用于训练的所有标签包括val-label)
data_param::batch_size:64(代表一次迭代,增大该值会使1个epoch内迭代次数减小,提高了使用效率;减小该值会有效适应内存不足的情况,并且收敛更加精确)
2. layer:
name:val-data
type:Data
top:Data(数据传去data)
top:label(同上,去label)
data_param::batch_size:32(是train-data的一半,这说明选取val-data的总数是train-data的一半)
3. layer: name:scale
type:Power
bottom:data(数据从data层传来)
power_param::scale:0.0125(将像素值归一化)
4. layer:
name:conv1
type:Convolution(数据类型:卷积)
bottom:scaled(数据从scaled层来)
top:conv1(数据传往conv1层)
param::lr_mult:1.0(权重参数w的学习率倍数)
param::lr_mult:2.0(权重参数b的学习率倍数)
convolution_param::num_output:20(输出特征图像个数)
kernel_size:5(卷积层filter的尺寸是5*5)
stride: 1(filter移动步数为1)
weight_filter::type:xavier(weight_filter类型是xavierFilter,用于保证每一层输出方差尽可能相等) baise_filter::type:constant()
5. layer:name:pool1(池化层1)
type:Pooling(类型:池化)
bottom:conv1(数据来自conv1层)
top:pool1(数据去往pool1层)
pooling_param::pool:MAX(最大池化)
kernel_size:2(池化层filter2*2)
stride:2(步数为2)
- 省略layer:conv2卷积层2和layer:pooling2池化层2
8. layer:
name:relu1(非线性层1)
type:ReLu(类型:非线性)
bottom:ip1(数据去往ip1层)
top:ip1(数据来自ip1层)
9. layer:
...
type:InnerProduct1(类型:内积,两个笛卡尔坐标向量的内积) ...
10. 11. 12. layer
...
type:Accuracy, SoftmaxWithLoss, Softmax(分别是三个产出指标:精确度、丢失和归一化函数)