通过前面的学习,我们已经能够正常训练各种数据了。设置好solver.prototxt后,我们可以把训练好的模型保存起来,如lenet_iter_10000.caffemodel。 训练多少次就自动保存一下,这个是通过snapshot进行设置的,保存文件的路径及文件名前缀是由snapshot_prefix来设定的。这个文件里面存放的就是各层的参数,即net.params,里面没有数据(net.blobs)。顺带还生成了一个相应的solverstate文件,这个和caffemodel差不多,但它多了一些数据,如模型名称、当前迭代次数等。两者的功能不一样,训练完后保存起来的caffemodel,是在测试阶段用来分类的,而solverstate是用来恢复训练的,防止意外终止而保存的快照(有点像断点续传的感觉)。

既然我们知道了caffemodel里面保存的就是模型各层的参数,因此我们可以把这些参数提取出来,进行可视化,看一看究竟长什么样。

我们先训练cifar10数据(mnist也可以),迭代10000次,然后将训练好的 model保存起来,名称为my_iter_10000.caffemodel,然后使用jupyter notebook 来进行可视化。

在此顺便问一下各位大牛:如何在cnblogs中,发表jupyter notebook生成的文章?

首先,导入必要的库
In [1]:
import numpy as np
import matplotlib.pyplot as plt
import os,sys,caffe
%matplotlib inline

In [2]:
caffe_root='/home/lee/caffe/'
os.chdir(caffe_root)
sys.path.insert(0,caffe_root+'python')

In [3]:
plt.rcParams['figure.figsize'] = (8, 8)
plt.rcParams['image.interpolation'] = 'nearest'
plt.rcParams['image.cmap'] = 'gray'

设置网络模型,并显示该模型中各层名称和参数的规模(注意此处是net.params, 而不是net.blobs)
In [4]:
net = caffe.Net(caffe_root + 'examples/cifar10/cifar10_full.prototxt',caffe_root + 'examples/cifar10/my_iter_10000.caffemodel',caffe.TEST)
[(k, v[0].data.shape) for k, v in net.params.items()]

Out[4]:
[('conv1', (32, 3, 5, 5)),('conv2', (32, 32, 5, 5)),('conv3', (64, 32, 5, 5)),('ip1', (10, 1024))]

cifar10训练的模型配置在文件cifar10_full.prototxt里面,共有三个卷积层和一个全连接层,参数规模如上所示。
In [5]:
#编写一个函数,用于显示各层的参数
def show_feature(data, padsize=1, padval=0):data -= data.min()data /= data.max()# force the number of filters to be squaren = int(np.ceil(np.sqrt(data.shape[0])))padding = ((0, n ** 2 - data.shape[0]), (0, padsize), (0, padsize)) + ((0, 0),) * (data.ndim - 3)data = np.pad(data, padding, mode='constant', constant_values=(padval, padval))# tile the filters into an imagedata = data.reshape((n, n) + data.shape[1:]).transpose((0, 2, 1, 3) + tuple(range(4, data.ndim + 1)))data = data.reshape((n * data.shape[1], n * data.shape[3]) + data.shape[4:])plt.imshow(data)plt.axis('off')

In [6]:
# 第一个卷积层,参数规模为(32,3,5,5),即32个5*5的3通道filter
weight = net.params["conv1"][0].data
print weight.shape
show_feature(weight.transpose(0, 2, 3, 1))

(32, 3, 5, 5)
参数有两种类型:权值参数和偏置项。分别用params["conv1"][0] 和params["conv1"][1] 表示 。
我们只显示权值参数,因此用params["conv1"][0]

In [7]:
# 第二个卷积层的权值参数,共有32*32个filter,每个filter大小为5*5
weight = net.params["conv2"][0].data
print weight.shape
show_feature(weight.reshape(32**2, 5, 5))

(32, 32, 5, 5)

In [8]:
# 第三个卷积层的权值,共有64*32个filter,每个filter大小为5*5,取其前1024个进行可视化
 weight = net.params["conv3"][0].data print weight.shape show_feature(weight.reshape(64*32, 5, 5)[:1024])

(64, 32, 5, 5)

Caffe学习系列(16):caffemodel可视化相关推荐

  1. Caffe学习系列(16):各层权值参数可视化

    原文有更新: Caffe学习系列(16):各层权值参数可视化 - denny402 - 博客园 http://www.cnblogs.com/denny402/p/5103425.html 通过前面的 ...

  2. caffe学习日记--lesson7:caffemodel可视化的两种方法

    在Caffe中,目前有两种可视化prototxt格式网络结构的方法: 使用Netscope在线可视化 使用Caffe提供的draw_net.py 本文将就这两种方法加以介绍 Netscope:支持Ca ...

  3. Caffe 学习系列

    学习列表: Google protocol buffer在windows下的编译 caffe windows 学习第一步:编译和安装(vs2012+win 64) caffe windows学习:第一 ...

  4. Caffe学习系列(17):模型各层特征和过滤器可视化

    转载自: Caffe学习系列(17):模型各层特征和过滤器可视化 - denny402 - 博客园 http://www.cnblogs.com/denny402/p/5105911.html cif ...

  5. Caffe学习系列(13):数据可视化环境(python接口)配置

    原文有更新: Caffe学习系列(13):数据可视化环境(python接口)配置 - denny402 - 博客园 http://www.cnblogs.com/denny402/p/5088399. ...

  6. Caffe学习系列(23):如何将别人训练好的model用到自己的数据上

    caffe团队用imagenet图片进行训练,迭代30多万次,训练出来一个model.这个model将图片分为1000类,应该是目前为止最好的图片分类model了. 假设我现在有一些自己的图片想进行分 ...

  7. Caffe学习系列(22):caffe图形化操作工具digits运行实例

    上接:Caffe学习系列(21):caffe图形化操作工具digits的安装与运行 经过前面的操作,我们就把数据准备好了. 一.训练一个model 右击右边Models模块的" Images ...

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

    转载自: Caffe学习系列(19): 绘制loss和accuracy曲线 - denny402 - 博客园 http://www.cnblogs.com/denny402/p/5110204.htm ...

  9. Caffe学习系列(21):caffe图形化操作工具digits的安装与运行

    经过前面一系列的学习,我们基本上学会了如何在linux下运行caffe程序,也学会了如何用python接口进行数据及参数的可视化. 如果还没有学会的,请自行细细阅读: caffe学习系列:http:/ ...

  10. Caffe学习系列(十):腾讯ncnn框架

    Caffe学习系列(十):腾讯ncnn框架 <手把手AI项目>七.MobileNetSSD通过Ncnn前向推理框架在PC端的使用(目标检测 objection detection) 1.n ...

最新文章

  1. C# mongodb 类库
  2. 网络安全体系 应用学习手册 下载
  3. 区块链经济时代得“先机”者得天下!
  4. day36 10-Hibernate中的事务:解决丢失更新
  5. C++中的Lambda表达式详解
  6. SpringBoot 2.x 整合Mybatis二:PageHelper分页
  7. java 字符串匹配_多模字符串匹配算法原理及Java实现代码
  8. ASP.NET中自动生成XML文件并通过XSLT显示在网页中的方法
  9. 创新创业大讲堂第一讲
  10. 手机投屏到电视的5种方法 看完才知道原来这么简单!
  11. RIFT Multi-Modal Image Matching Based on Radiation-Variation Insensitive Feature Transform
  12. 计算机术语root,root是什么意思
  13. 试题 基础练习 Fibonacci数列
  14. Paul叔纯正美式发音②~发音技巧(二)
  15. roc曲线spss怎么做_SPSS单因素ROC曲线及多因素联合诊断ROC曲线绘制(原创手把手) - 医学统计和生物统计讨论版 -丁香园论坛...
  16. 快排为什么一定要从右边开始?
  17. 力扣每日一题2021-12-24中等题:吃苹果的最大数目
  18. oracle 创建emp表,dept表
  19. 一花独放不是春 梆梆安全呼吁构建物联网安全共同体
  20. Above the MedianDueling GPSs

热门文章

  1. 3. 说清 Observable
  2. 推荐一款专为新手用的Python开发工具
  3. css position relative absolute fixed
  4. php中的钩子理解及应用
  5. Message Queue基本使用说明
  6. 线段树(单点更新) HDOJ 4288 Coder
  7. Office 2007无法卸载也无法安装的解决
  8. [心情]一落千丈的反差
  9. 林锐:5 C++/C程序的基本概念
  10. vue实现侧边栏手风琴效果