写在前面(干货文章):
笔记:
1、直接训练法
#!/usr/bin/env sh
TOOLS=../cafferead/build/tools
$TOOLS/caffe train --solver=gender_solver.prorotxt -gpu all #加入 -gpu 选项
-gpu 可以选择gpu的id号,如果是 -gpu all表示启用所有的GPU进行训练。
2、采用funing-tuning 训练法
$TOOLS/caffe train --solver=gender_solver.prorotxt -weights gender_net.caffemodel #加入-weights
加入-weights,这个功能很好用,也经常会用到,因为现在的CNN相关的文献,很多都是在已有的模型基础上,进行fine-tuning,因为我们大部分人都缺少训练数据,不像谷歌、百度这些土豪公司,有很多人专门做数据标注,对于小公司而言,往往缺少标注好的训练数据。因此我们一般使用fine-tuning的方法,在少量数据的情况下,尽可能的提高精度。我们可以使用:-weights 选项,利用已有的模型训练好的参数,作为初始值,进行继续训练。
使用现有模型存档对网络进行fine_tune的时候,由于改变了输出的number,最后一层必须重新命名,目的是不复用最后一层的存档参数。和tensorflow不太一样的时候,如果最后一层的参数数量不一致,训练时不会抛出异常,居然可以正常运行,然后。。。收敛只是梦一场。
例:
$ /usr/bin/caffe train
-solver=./solver.prototxt
-weights=./snaps/simpleconv1012_iter_10000.caffemodel
2>&1 |tee ./snaps/FinetuneV1_log.txt
2>&1 |tee ./snaps/FinetuneV1_log.txt 将终端的log输出到txt