caffe命令行的常用命令:
GLOG_logtostderr=0 GLOG_log_dir=/home/yly/ERFNet/weights/snapshots_encoder_finetune/ /home/yly/ENet/caffe-enet/build/tools/caffe train -solver /home/yly/ERFNet/prototxts/erfnet_encoder_solver.prototxt
GLOG_logtostderr=0 GLOG_log_dir=/home/yly/ERFNet/weights/snapshots_decoder_finetune/ /home/yly/ENet/caffe-enet/build/tools/caffe train -solver /home/yly/ERFNet/prototxts/erfnet_decoder_solver_finetune.prototxt -weights /home/yly/ERFNet/weights/snapshots_decoder/erfnet_iter_3000.caffemodel
前面的命令和训练的一致,在后面添加-weights,指定需要finetune的初始化权重。
GLOG_logtostderr=0 GLOG_log_dir=/home/yly/ERFNet/weights/snapshots_decoder_finetune/ /home/yly/ENet/caffe-enet/build/tools/caffe train -solver /home/yly/ERFNet/prototxts/erfnet_decoder_solver_finetune.prototxt -snapshot /home/yly/ERFNet/weights/snapshots_decoder/erfnet_iter_3000.solverstate
由于训练时间长,中间可能由于各种原因需要中断训练,系统会保存solverstate文件,以便继续之前的训练。利用-snapshot载入之前训练的状态。
/home/yly/ENet/caffe-enet/build/tools/caffe test -model /home/yly/ERFNet/prototxts/erfnet_decoder_train_val.prototxt -weights /home/yly/ERFNet/weights/snapshots_decoder/erfnet_iter_70000.caffemodel -iterations 500 -gpu 0 2>&1| tee /home/yly/ERFNet/weights/snapshots_decoder/test_accuracy.log
-model指定的是神经网络配置文件,注意:这里的文件必须是在data输入层含有测试文件路径的prototxt,而不是只输入数据维度的deploy.prototxt。后面-weights载入已经训练好的权重文件,-iterations指定迭代次数(test数据集中有多少文件就指定为多少)。后面的命令是输出日志的另一种方式: 2>&1| tee /home/yly/ERFNet/weights/snapshots_decoder/test_accuracy.log
/home/yly/ENet/caffe-enet/build/tools/caffe time -model /home/yly/ERFNet/prototxts/erfnet_decoder_train_val.prototxt -weights /home/yly/ERFNet/weights/snapshots_decoder/erfnet_iter_70000.caffemodel -iterations 10 -gpu 0 2>&1| tee /home/yly/ERFNet/weights/snapshots_decoder/test_time.log
另外可指定 -phase TRAIN (同时测量forward和backward的时间) 或者 -phase TEST (只测量forward time)
在训练中利用命令GLOG_logtostderr=0在GLOG_log_dir指定的路径下生成了日志文件。日志文件中打印的是屏幕上的所有信息,我们往往只关注loss或accuracy随着迭代数的增加是如何变化的。可以使用原生caffe的 /tools/extra文件夹下parse_log.sh, extract_seconds.py, plot_training_log.py, plot_training_log.py.example的文件对日志文件进行解析,提取感兴趣的信息。
chmod u+x ./parse_log.sh ./extract_seconds.py ./plot_training_log.py ./plot_training_log.py.example
./parse_log.sh caffe.yly.yly.log.INFO.20180812-151029.3307
其中 caffe.yly.yly.log.INFO.20180812-151029.3307是利用section1中的命令生成的日志文件。生成的*.log.train文件和*.log.test文件里是时间、迭代次数、lr、loss的列表。
将训练生成的日志文件加上.log后缀,然后执行:
./plot_training_log.py.example 6 trainloss_iters.png caffe.yly.yly.log.INFO.20180812-151029.3307.log
其中不同数字表示输出不同的图表:
0: Test accuracy vs. Iters
1: Test accuracy vs. Seconds
2: Test loss vs. Iters
3: Test loss vs. Seconds
4: Train learning rate vs. Iters
5: Train learning rate vs. Seconds
6: Train loss vs. Iters
7: Train loss vs. Seconds
只需要在训练的命令行后面指定GPU编号即可:
-gpu 0,1
若使用全部GPU:
-gpu all
每秒刷新一次:
watch -n 1 nvidia-smi
参考资料:http://caffe.berkeleyvision.org/tutorial/interfaces.html