机器学习 - Solverstate 使用和CaffeMode 可视化

在使用 caffe训练完网络之后,有时候想要可视化展示一下训练的网络结果,而网络结果就是最后生成的:.caffemode 文件。

首先解释下 caffe_alexnet_train_iter_1000.caffemodelcaffe_alexnet_train_iter_1000.solverstate这两个结果文件,这个是迭代1000次生成的文件,其中caffemodel是各层的参数,也就是训练之后的网络模型最重要的文件,而 solverstate则是快照,就是可以通过该文件继续进行迭代,而不是迭代,因为其他原因造成迭代终止,就要从头开始继续(类似于断点续传)。

这两个文件的位置请看你训练网络的 solver.prototxt文件,这里面的 snapshot_prefix字段里写了文件生成的位置。

solverstate使用

这个文件是用来能够继续进行数据训练的。

./build/tools/caffe train --solver=/home/alps/caffe/examples/imgsnet/bvlc_alexnet/solver.prototxt --snapshot=/home/alps/caffe/examples/imgsnet/bvlc_alexnet/caffe_alexnet_train_iter_1000.solverstate  

上面的命令请用一行写出来,然后运行就可以了,首先 solver和训练命令一样,就是训练网络的 solver.prototxt文件,solverstate就是训练之后生成的 快照文件。

caffemodel可视化

这里要做的就是把.caffemodel这个文件可视化。使用 jupyter notebook来进行可视化。

这个jupyter notebook是一个人封装的工具,如何使用可以自行百度。

安装 jupyter notebook

安装比较简单,首先要安装 python:

sudo apt-get install python
//安装 pip
sudo apt-get install python-pip

然后通过 pip来安装 jupyter

sudo pip --default-timeout=1000 install jupyter

运行 jupyter可视化 caffemodel

首先运行 安装好的 jupyter, 在终端里输入:

jupyter notebook

出现如下所示:

[I 01:31:30.693 NotebookApp] Writing notebook server cookie secret to /run/user/1000/jupyter/notebook_cookie_secret
[I 01:31:32.902 NotebookApp] Serving notebooks from local directory: /home/alps/caffe/examples/imgsnet/bvlc_alexnet
[I 01:31:32.902 NotebookApp] 0 active kernels 
[I 01:31:32.902 NotebookApp] The Jupyter Notebook is running at: http://localhost:8888/?token=65ce7e760fa614603b1e97e6631bc005a31cc70099181d8b
[I 01:31:32.902 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 01:31:32.904 NotebookApp] 

    Copy/paste this URL into your browser when you connect for the first time,
    to login with a token:
        http://localhost:8888/?token=65ce7e760fa614603b1e97e6631bc005a31cc70099181d8b

然后会自动弹出浏览器的页面的!在浏览器页面点击右面的 New下拉框,新建一个 Notebooks,如图所示:
这里写图片描述
我这里只有 Python2 也就新建这个,然后在In [1]输入如下代码:

import numpy as np
import matplotlib.pyplot as plt
import os,sys,caffe
%matplotlib inline

然后运行,没错的话, In[2]

caffe_root='/home/alps/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'

没报错的话继续In [4]

net=caffe.Net(caffe_root+'examples/imgsnet/bvlc_alexnet/train_val.prototxt',caffe_root+'examples/imgsnet/bvlc_alexnet/caffe_alexnet_train_iter_1000.caffemodel',caffe.TEST)

[(k, v[0].data.shape) for k, v in net.params.items()]

这里要说下,这个train_val.prototxt文件是网络架构的那个文件,不要填写错了,错了的话会报错。

这里应该会输出类似下面内容Out [5]

[('conv1', (96, 3, 11, 11)),
 ('conv2', (256, 48, 5, 5)),
 ('conv3', (384, 256, 3, 3)),
 ('conv4', (384, 192, 3, 3)),
 ('conv5', (256, 192, 3, 3)),
 ('fc6', (4096, 9216)),
 ('fc7', (4096, 4096)),
 ('fc8', (1000, 4096))]

然后定义一个函数,用来展示卷积层内容的:

def show_feature(data, padsize=1, padval=0):
    data -= data.min()
    data /= data.max()

    #force the number of filters to be square
    n = 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))

    #title the filters into an image
    data = 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')

查看卷积层1的内容:

#output conv1 其中 conv1的大小是96个11*11的3通道卷积核
weight = net.params["conv1"][0].data
print weight.shape
show_feature(weight.transpose(0, 2, 3, 1))

参数有两种类型:权值参数和偏置项。分别用params["conv1"][0]params["conv1"][1] 表示 。
我们只显示权值参数,因此用params["conv1"][0] 。展示结果大致如下:
这里写图片描述
然后查看卷积层2:

#output_conv2
weight = net.params["conv2"][0].data
print weight.shape
show_feature(weight.reshape(256*48, 5, 5))

展示如下:
这里写图片描述

同理可以查看其他层内容。

遇到问题

jupyter 安装问题

安装这个会遇到很多问题,最大的问题就是:

no module named ....

这种问题就是缺少东西,我在安装的时候遇到非常多问题,不过把问题拷贝到 Google 就好了。

这里只说几点,首先有种情况是缺少 numpyscipy这两个库,如果报错并且你是 Ubuntu系统的话,使用pip有可能会安装不上,所以使用:

sudo apt-get install numpy
sudo apt-get install scipy

来安装,其他的就是有时候使用 pip安装报错,不是缺少 Moudle 就是莫名其妙的错误:

sudo pip --default-timeout=1000 install --no-use-wheel scikit-image

这里的timeout是为了解决报错出现超时的问题,使用--no-use-wheel是为了解决安装这些模块(例如 scikit-image)遇到的错误。

caffemodel可视化问题

在通过 jupyter来可视化的时候,会遇到一些问题:
代码输入到 In [1] 里,点击运行,看报错内容,一般 caffe这里会报错,很大原因是之前没有运行make pycaffe

运行make pycaffe -j的时候也会遇到一些头文件,类库缺少的问题,请先查看caffe安装的跟路径下的Makefile.config文件,这个文件里有个变量是PYTHON_INCLUDE请观察下里面的路径有没有问题。

其他的问题一般不大。请自行 Google。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值