在使用 caffe训练完网络之后,有时候想要可视化展示一下训练的网络结果,而网络结果就是最后生成的:.caffemode 文件。
首先解释下 caffe_alexnet_train_iter_1000.caffemodel
和 caffe_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 就好了。
这里只说几点,首先有种情况是缺少 numpy
和 scipy
这两个库,如果报错并且你是 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。