使用python接口来运行caffe程序,主要的原因是python非常容易可视化。所以不推荐大家在命令行下面运行python程序。如果非要在命令行下面运行,还不如直接用 c++算了。

推荐使用jupyter notebook,spyder等工具来运行python代码,这样才和它的可视化完美结合起来。

因为我是用anaconda来安装一系列python第三方库的,所以我使用的是spyder,与matlab界面类似的一款编辑器,在运行过程中,可以查看各变量的值,便于理解,如下图:

只要安装了anaconda,运行方式也非常方便,直接在终端输入spyder命令就可以了。

在caffe的训练过程中,我们如果想知道某个阶段的loss值和accuracy值,并用图表画出来,用python接口就对了。

  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Tue Jul 19 16:22:22 2016
  4.  
  5. @author: root
  6. """
  7.  
  8. import matplotlib.pyplot as plt
  9. import caffe
  10. caffe.set_device(0)
  11. caffe.set_mode_gpu()
  12. # 使用SGDSolver,即随机梯度下降算法
  13. solver = caffe.SGDSolver('/home/xxx/mnist/solver.prototxt')
  14.  
  15. # 等价于solver文件中的max_iter,即最大解算次数
  16. niter = 9380
  17. # 每隔100次收集一次数据
  18. display= 100
  19.  
  20. # 每次测试进行100次解算,10000/100
  21. test_iter = 100
  22. # 每500次训练进行一次测试(100次解算),60000/64
  23. test_interval =938
  24.  
  25. #初始化
  26. train_loss = zeros(ceil(niter * 1.0 / display))
  27. test_loss = zeros(ceil(niter * 1.0 / test_interval))
  28. test_acc = zeros(ceil(niter * 1.0 / test_interval))
  29.  
  30. # iteration 0,不计入
  31. solver.step(1)
  32.  
  33. # 辅助变量
  34. _train_loss = 0; _test_loss = 0; _accuracy = 0
  35. # 进行解算
  36. for it in range(niter):
  37. # 进行一次解算
  38. solver.step(1)
  39. # 每迭代一次,训练batch_size张图片
  40. _train_loss += solver.net.blobs['SoftmaxWithLoss1'].data
  41. if it % display == 0:
  42. # 计算平均train loss
  43. train_loss[it // display] = _train_loss / display
  44. _train_loss = 0
  45.  
  46. if it % test_interval == 0:
  47. for test_it in range(test_iter):
  48. # 进行一次测试
  49. solver.test_nets[0].forward()
  50. # 计算test loss
  51. _test_loss += solver.test_nets[0].blobs['SoftmaxWithLoss1'].data
  52. # 计算test accuracy
  53. _accuracy += solver.test_nets[0].blobs['Accuracy1'].data
  54. # 计算平均test loss
  55. test_loss[it / test_interval] = _test_loss / test_iter
  56. # 计算平均test accuracy
  57. test_acc[it / test_interval] = _accuracy / test_iter
  58. _test_loss = 0
  59. _accuracy = 0
  60.  
  61. # 绘制train loss、test loss和accuracy曲线
  62. print '\nplot the train loss and test accuracy\n'
  63. _, ax1 = plt.subplots()
  64. ax2 = ax1.twinx()
  65.  
  66. # train loss -> 绿色
  67. ax1.plot(display * arange(len(train_loss)), train_loss, 'g')
  68. # test loss -> 黄色
  69. ax1.plot(test_interval * arange(len(test_loss)), test_loss, 'y')
  70. # test accuracy -> 红色
  71. ax2.plot(test_interval * arange(len(test_acc)), test_acc, 'r')
  72.  
  73. ax1.set_xlabel('iteration')
  74. ax1.set_ylabel('loss')
  75. ax2.set_ylabel('accuracy')
  76. plt.show()

最后生成的图表在上图中已经显示出来了。

caffe的python接口学习(7):绘制loss和accuracy曲线的更多相关文章

  1. Caffe---Pycaffe 绘制loss和accuracy曲线

    Caffe---Pycaffe 绘制loss和accuracy曲线 <Caffe自带工具包---绘制loss和accuracy曲线>:可以看出使用caffe自带的工具包绘制loss曲线和a ...

  2. Caffe---自带工具 绘制loss和accuracy曲线

    Caffe自带工具包---绘制loss和accuracy曲线 为什么要绘制loss和accuracy曲线?在训练过程中画出accuracy 和loss曲线能够更直观的观察网络训练的状态,以便更好的优化 ...

  3. caffe的python接口学习(1):生成配置文件

    caffe是C++语言写的,可能很多人不太熟悉,因此想用更简单的脚本语言来实现.caffe提供matlab接口和python接口,这两种语言就非常简单,而且非常容易进行可视化,使得学习更加快速,理解更 ...

  4. Caffe学习系列(19): 绘制loss和accuracy曲线

    如同前几篇的可视化,这里采用的也是jupyter notebook来进行曲线绘制. // In [1]: #加载必要的库 import numpy as np import matplotlib.py ...

  5. caffe的python接口学习(4):mnist实例---手写数字识别

    深度学习的第一个实例一般都是mnist,只要这个例子完全弄懂了,其它的就是举一反三的事了.由于篇幅原因,本文不具体介绍配置文件里面每个参数的具体函义,如果想弄明白的,请参看我以前的博文: 数据层及参数 ...

  6. caffe的python接口学习(6)用训练好的模型caffemodel分类新图片

    经过前面两篇博文的学习,我们已经训练好了一个caffemodel模型,并生成了一个deploy.prototxt文件,现在我们就利用这两个文件来对一个新的图片进行分类预测. 我们从mnist数据集的t ...

  7. caffe的python接口学习(4)mnist实例手写数字识别

    以下主要是摘抄denny博文的内容,更多内容大家去看原作者吧 一 数据准备 准备训练集和测试集图片的列表清单; 二 导入caffe库,设定文件路径 # -*- coding: utf-8 -*- im ...

  8. caffe的python接口学习(6):用训练好的模型(caffemodel)来分类新的图片

    经过前面两篇博文的学习,我们已经训练好了一个caffemodel模型,并生成了一个deploy.prototxt文件,现在我们就利用这两个文件来对一个新的图片进行分类预测. 我们从mnist数据集的t ...

  9. caffe的python接口学习(2):生成solver文件

    caffe在训练的时候,需要一些参数设置,我们一般将这些参数设置在一个叫solver.prototxt的文件里面,如下: base_lr: 0.001 display: 782 gamma: 0.1 ...

随机推荐

  1. Linq表达式、Lambda表达式你更喜欢哪个?

    什么是Linq表达式?什么是Lambda表达式? 如图: 由此可见Linq表达式和Lambda表达式并没有什么可比性. 那与Lambda表达式相关的整条语句称作什么呢?在微软并没有给出官方的命名,在& ...

  2. Java初始化过程

    这篇文章主要讲解Java在创建对象的时候,初始化的顺序.主要从以下几个例子中讲解: 继承关系中初始化顺序 初始化块与构造器的顺序 已经加载过的类的初始化顺序 加载父类,会不会加载子类 创建子类对象会不 ...

  3. npm package.json属性详解

    概述 本文档是自己看官方文档的理解+翻译,内容是package.json配置里边的属性含义.package.json必须是一个严格的json文件,而不仅仅是js里边的一个对象.其中很多属性可以通过np ...

  4. 快递Api接口 & 微信公众号开发流程

    之前的文章,已经分析过快递Api接口可能被使用的需求及场景:今天呢,简单给大家介绍一下微信公众号中怎么来使用快递Api接口,来完成我们的需求和业务场景. 开发语言:Nodejs,其中用到了Neo4j图 ...

  5. 一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)

    在目前的软件项目中,都会较多的使用到对文档的操作,用于记录和统计相关业务信息.由于系统自身提供了对文档的相关操作,所以在一定程度上极大的简化了软件使用者的工作量. 在.NET项目中如果用户提出了相关文 ...

  6. php 基础代码大全(不断完善中)

    下面是基础的PHP的代码,不断完善中~ //语法错误(syntax error)在语法分析阶段,源代码并未被执行,故不会有任何输出. /* [命名规则] */ 常量名 类常量建议全大写,单词间用下划线 ...

  7. LVM基本介绍与常用命令

    一.LVM介绍LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制LVM - 优点:LVM通常用于装备大量磁盘的系统,但它同样适 ...

  8. mysql 写入优化

    1 主从分离 从表读取,主表可以去掉索引 2 先写入到文件或redis,定时刷新到库 3 用nginx 4 分库 分表 每个库表的数据总量少了 插入会快一点 5 最大限度减少查库的次数 6 一条sql ...

  9. grep 查找bash脚本中的注释代码

    出于安全性的考虑,不建议在bash脚本中注释掉不使用的代码.也就是说如果某段代码不使用了,那么应该删除掉,而不是简单地注释掉.假如你突然意识到这一点,而以前并没有遵从这个原则,现在需要找出脚本中的注释 ...

  10. 使用win10远程控制ubuntu16.04

    使用win10远程控制ubuntu16.04,网上很多需要安装xfce桌面的.今天介绍一下,不需要安装其他桌面,使用Ubuntu16.04自带桌面,漂亮美观. Ubuntu16.04端: 1.打开终端 ...