caffe net.blobs: net.params作用

caffe的python接口學習(8):caffemodel中的參數及特徵的抽取

	</h1>
	<div class="clear"></div>
	<div class="postBody">

如果用公式  y=f(wx+b)

來表示整個運算過程的話,那麼w和b就是我們需要訓練的東西,w稱爲權值,在cnn中也可以叫做卷積核(filter),b是偏置項。f是激活函數,有sigmoid、relu等。x就是輸入的數據。

數據訓練完成後,保存的caffemodel裏面,實際上就是各層的w和b值。

我們運行代碼:

deploy=root + 'mnist/deploy.prototxt'    #deploy文件
caffe_model=root + 'mnist/lenet_iter_9380.caffemodel'   #訓練好的 caffemodel
net = caffe.Net(net_file,caffe_model,caffe.TEST)   #加載model和network

就把所有的參數和數據都加載到一個net變量裏面了,但是net是一個很複雜的object, 想直接顯示出來看是不行的。其中:

net.params: 保存各層的參數值(w和b)

net.blobs: 保存各層的數據值

可用命令:

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

查看各層的參數值,其中k表示層的名稱,v[0].data就是各層的W值,而v[1].data是各層的b值。注意:並不是所有的層都有參數,只有卷積層和全連接層纔有。

也可以不查看具體值,只想看一下shape,可用命令

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

假設我們知道其中第一個卷積層的名字叫'Convolution1', 則我們可以提取這個層的參數:

w1=net.params['Convolution1'][0].data
b1=net.params['Convolution1'][1].data

輸入這些代碼,實際查看一下,對你理解network非常有幫助。

同理,除了查看參數,我們還可以查看數據,但是要注意的是,net裏面剛開始是沒有數據的,需要運行:

net.forward()

之後纔會有數據。我們可以用代碼:

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

[(k,v.data) for k,v in net.blobs.items()]

來查看各層的數據。注意和上面查看參數的區別,一個是net.params, 一個是net.blobs.

實際上數據剛輸入的時候,我們叫圖片數據,卷積之後我們就叫特徵了。

如果要抽取第一個全連接層的特徵,則可用命令:

fea=net.blobs['InnerProduct1'].data

只要知道某個層的名稱,就可以抽取這個層的特徵。

推薦大家在spyder中,運行一下上面的所有代碼,深入理解模型各層。

最後,總結一個代碼:

複製代碼
import caffe
import numpy as np
root='/home/xxx/'   #根目錄
deploy=root + 'mnist/deploy.prototxt'    #deploy文件
caffe_model=root + 'mnist/lenet_iter_9380.caffemodel'   #訓練好的 caffemodel
net = caffe.Net(deploy,caffe_model,caffe.TEST)   #加載model和network
[(k,v[0].data.shape) for k,v in net.params.items()]  #查看各層參數規模
w1=net.params['Convolution1'][0].data  #提取參數w
b1=net.params['Convolution1'][1].data  #提取參數b
net.forward()   #運行測試

[(k,v.data.shape) for k,v in net.blobs.items()]  #查看各層數據規模
fea=net.blobs['InnerProduct1'].data   #提取某層數據(特徵)
複製代碼

 

分類: caffe
標籤: python, caffe, mnist
<div id="blog_post_info">
5
0
<div class="clear"></div>
<div id="post_next_prev">

<a href="https://www.cnblogs.com/denny402/p/5686067.html" class="p_n_p_prefix">« </a> 上一篇:    <a href="https://www.cnblogs.com/denny402/p/5686067.html" title="發佈於 2016-07-19 20:11">caffe的python接口學習(7):繪製loss和accuracy曲線</a>
<br>
<a href="https://www.cnblogs.com/denny402/p/5849416.html" class="p_n_p_prefix">» </a> 下一篇:    <a href="https://www.cnblogs.com/denny402/p/5849416.html" title="發佈於 2016-09-07 14:44">tensorflow學習筆記一:安裝調試</a>
posted @ 2016-07-19 21:13  denny402  閱讀(34509)  評論(33編輯  收藏
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章