您的位置:首页 > 编程语言 > Python开发

caffemodel的卷积层可视化(Python接口)

2017-06-06 16:48 369 查看
模型文件为自己训练的caffenet_iter_720.caffemodel,模型配置文件为deploy.prototxt。使用jupyter notebook作为Python可视化工具

#首先导入必要的库

In[1]:
import numpy as np

import matplotlib.pyplot as plt

import os,sys,caffe

%matplotlib inline

#设置caffe根目录路径,并动态修改系统路径。os.chdir()
方法用于改变当前工作目录到指定的路径。sys.path.insert(0,*)动态修改系统路径


In[2]:
caffe_root = '/home/che/caffe-master/'

os.chdir(caffe_root)

sys.path.insert(0,caffe_root+'python')

#显示的图像大小为10*10,图像的插值是以最近为原则,图像颜色为灰色

In[3]:
plt.rcParams['figure.figsize'] = [10,10]


plt.rcParams['image.interpolation'] = 'nearest'

plt.rcParams['image.cmap'] = 'gray'

#加载模型配置文件,即deploy.prototxt文件,和模型文件

In[4]:
net = caffe.Net(caffe_root + 'examples/256/deploy.prototxt',


caffe_r
4000
oot + 'examples/256/models/caffenet_iter_720.caffemodel',


caffe.TEST)

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






#编写一个函数用于显示各层参数

In[5]:
def show_feature(data, padsize = 1,padval = 0)


data - = data.min()

data /= data.max()



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



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

#显示conv1权值参数。参数有两种类型:权值和偏置。此处仅显示权值["conv1"][0]

In[6]:
weight = net.params["conv1"][0].data


print weight.shape

show_feature(weight.transpose(0,2,3,1))






#显示conv2的前1024个像素的权值参数

In[7]
weight = net.params["conv2"][0].data


print weight.shape

show_feature(weight.reshape(256*48,5,5)[:1024])




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: