我們通過命令命令行進行訓練的時候,每一次都會打印出訓練loss和測試的準確率,這些都是衡量這個網絡的指標,直接看日誌,這個準確率和loss變化趨勢是不清晰的,最好的方式就是能把它繪製成圖形化,曲線圖是最適合表現變化趨勢的,下面就說說怎麼畫。
1、編寫python腳本
#Step1 import
import numpy as np
import matplotlib.pyplot as plt
import sys,os
caffe_root = 'E:/caffe/caffecase'
sys.path.insert(0, caffe_root + 'python')
import caffe
#Step2 Setting
caffe.set_mode_gpu()
solver = caffe.SGDSolver('E:/caffe/caffecase/mnist/lenet_solver.prototxt')
niter =1000
test_interval = 200
train_loss = np.zeros(niter)
test_acc = np.zeros(int(np.ceil(niter / test_interval)))
#Step3 Draw
for it in range(niter):
solver.step(1) # SGD by Caffe
# store the train loss
train_loss[it] = solver.net.blobs['loss'].data
solver.test_nets[0].forward(start='conv1')
if it % test_interval == 0:
acc=solver.test_nets[0].blobs['accuracy'].data
print 'Iteration', it, 'testing...','accuracy:',acc
test_acc[it // test_interval] = acc
print test_acc
_, ax1 = plt.subplots()
ax2 = ax1.twinx()
ax1.plot(np.arange(niter), train_loss)
ax2.plot(test_interval * np.arange(len(test_acc)), test_acc, 'r')
ax1.set_xlabel('iteration')
ax1.set_ylabel('train loss')
ax2.set_ylabel('test accuracy')
plt.show()
2、執行腳本
執行腳本,如果缺少模塊就導入。
3、繪製結果
紅色的線是測試的準確率,藍色的線是訓練的loss值。
從圖上就能看到,1000次迭代的準確率並不是最高的,而是700次左右達到了一個峯值