caffe学习笔记——loss及accuracy曲线绘制

本文通过Anaconda的Spyder环境,详细讲解如何利用Caffe进行模型训练,并绘制训练过程中的loss曲线和测试过程中的accuracy曲线。在设置GPU求解器后,不直接调用solver.solve(),而是通过迭代并定时测试来记录关键数据,最终实现曲线的绘制。
摘要由CSDN通过智能技术生成

仍然运用anaconda中的Spyder编译器环境进行曲线的绘制:

(1)加载必要的库

: #加载必要的库
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import sys,os,caffe
#设置当前目录
caffe_root = 'D:/caffe/caffe-master/caffe-master/' 
sys.path.insert(0, caffe_root + 'python')
os.chdir(caffe_root)

(2)设置求解器,需要一个solver配置文件。

# set the solver prototxt
#caffe.set_device(0)
caffe.set_mode_cpu()
solver = caffe.SGDSolver('examples/cifar10/cifar10_quick_solver.prototxt')

若为GPU,则需要加上caffe.set_device(0),并将caffe.set_mode_cpu()改为caffe.set_mode_gpu()。

(3)如果不需要绘制曲线,只需要训练出一个caffemodel, 直接调用solver.solve()就可以了。如果要绘制曲线,就需要把迭代过程中的值保存下来,因此不能直接调用solver.solve(), 需要迭代。在迭代过程中,每迭代200次测试一次:

%%time
niter =4000
test_interval = 200
train_loss = np.zeros(niter)
test_acc = np.zeros(int(np.ceil(niter / test_interval)))

# the main solver loop
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

(4)绘制train过程中的loss曲线,和test过程中的accuracy曲线。

 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')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值