caffe的python接口caffemodel參數(shù)及特征抽取示例
正文
如果用公式 y=f(wx+b)
來表示整個運(yùn)算過程的話,那么w和b就是我們需要訓(xùn)練的東西,w稱為權(quán)值,在cnn中也可以叫做卷積核(filter),b是偏置項(xiàng)。f是激活函數(shù),有sigmoid、relu等。x就是輸入的數(shù)據(jù)。
數(shù)據(jù)訓(xùn)練完成后,保存的caffemodel里面,實(shí)際上就是各層的w和b值。
我們運(yùn)行代碼:
deploy=root + 'mnist/deploy.prototxt' #deploy文件 caffe_model=root + 'mnist/lenet_iter_9380.caffemodel' #訓(xùn)練好的 caffemodel net = caffe.Net(net_file,caffe_model,caffe.TEST) #加載model和network
就把所有的參數(shù)和數(shù)據(jù)都加載到一個net變量里面了,但是net是一個很復(fù)雜的object, 想直接顯示出來看是不行的。其中:
net.params: 保存各層的參數(shù)值(w和b)
net.blobs: 保存各層的數(shù)據(jù)值
可用命令:
[(k,v[0].data) for k,v in net.params.items()]
查看各層的參數(shù)值,其中k表示層的名稱,v[0].data就是各層的W值,而v[1].data是各層的b值。注意:并不是所有的層都有參數(shù),只有卷積層和全連接層才有。
也可以不查看具體值,只想看一下shape,可用命令
[(k,v[0].data.shape) for k,v in net.params.items()]
假設(shè)我們知道其中第一個卷積層的名字叫'Convolution1', 則我們可以提取這個層的參數(shù):
w1=net.params['Convolution1'][0].data b1=net.params['Convolution1'][1].data
輸入這些代碼,實(shí)際查看一下,對你理解network非常有幫助。
同理,除了查看參數(shù),我們還可以查看數(shù)據(jù),但是要注意的是,net里面剛開始是沒有數(shù)據(jù)的,需要運(yùn)行:
net.forward()
之后才會有數(shù)據(jù)。我們可以用代碼:
[(k,v.data.shape) for k,v in net.blobs.items()]
或
[(k,v.data) for k,v in net.blobs.items()]
來查看各層的數(shù)據(jù)。注意和上面查看參數(shù)的區(qū)別,一個是net.params, 一個是net.blobs.
實(shí)際上數(shù)據(jù)剛輸入的時候,我們叫圖片數(shù)據(jù),卷積之后我們就叫特征了。
如果要抽取第一個全連接層的特征,則可用命令:
fea=net.blobs['InnerProduct1'].data
只要知道某個層的名稱,就可以抽取這個層的特征。
推薦大家在spyder中,運(yùn)行一下上面的所有代碼,深入理解模型各層。
最后,總結(jié)一個代碼:
import caffe import numpy as np root='/home/xxx/' #根目錄 deploy=root + 'mnist/deploy.prototxt' #deploy文件 caffe_model=root + 'mnist/lenet_iter_9380.caffemodel' #訓(xùn)練好的 caffemodel net = caffe.Net(deploy,caffe_model,caffe.TEST) #加載model和network [(k,v[0].data.shape) for k,v in net.params.items()] #查看各層參數(shù)規(guī)模 w1=net.params['Convolution1'][0].data #提取參數(shù)w b1=net.params['Convolution1'][1].data #提取參數(shù)b net.forward() #運(yùn)行測試 [(k,v.data.shape) for k,v in net.blobs.items()] #查看各層數(shù)據(jù)規(guī)模 fea=net.blobs['InnerProduct1'].data #提取某層數(shù)據(jù)(特征)
以上就是caffe的python接口caffemodel參數(shù)及特征抽取的詳細(xì)內(nèi)容,更多關(guān)于python caffemodel參數(shù)特征抽取的資料請關(guān)注腳本之家其它相關(guān)文章!
- Python分析特征數(shù)據(jù)類別與預(yù)處理方法速學(xué)
- python?OpenCV實(shí)現(xiàn)圖像特征匹配示例詳解
- python深度學(xué)習(xí)tensorflow1.0參數(shù)和特征提取
- Python計算機(jī)視覺SIFT尺度不變的圖像特征變換
- python神經(jīng)網(wǎng)絡(luò)特征金字塔FPN原理
- python機(jī)器學(xué)習(xí)基礎(chǔ)特征工程算法詳解
- Python機(jī)器學(xué)習(xí)利用隨機(jī)森林對特征重要性計算評估
- Python機(jī)器學(xué)習(xí)特征重要性分析的8個常用方法實(shí)例探究
相關(guān)文章
python數(shù)據(jù)結(jié)構(gòu)之遞歸方法講解
這篇文章主要介紹了python數(shù)據(jù)結(jié)構(gòu)之遞歸講解,遞歸是解決問題的一種方法,它將問題不斷地分成更小的子問題,直到子問題可以用普通的方法解決。通常情況下,遞歸會使用一個不停調(diào)用自己的函數(shù),下面來看看文章對此的詳細(xì)介紹吧2021-12-12
Pandas實(shí)現(xiàn)復(fù)制dataframe中的每一行
這篇文章主要介紹了Pandas實(shí)現(xiàn)復(fù)制dataframe中的每一行方式,2024-02-02
python實(shí)現(xiàn)統(tǒng)計代碼行數(shù)的方法
這篇文章主要介紹了python實(shí)現(xiàn)統(tǒng)計代碼行數(shù)的方法,涉及Python中os模塊及codecs模塊的相關(guān)使用技巧,需要的朋友可以參考下2015-05-05
python將字母轉(zhuǎn)化為數(shù)字實(shí)例方法
在本篇文章里小編給大家整理的是關(guān)于python如何將字母轉(zhuǎn)化為數(shù)字的相關(guān)實(shí)例內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。2019-10-10
python中requests爬去網(wǎng)頁內(nèi)容出現(xiàn)亂碼問題解決方法介紹
這篇文章主要介紹了python中requests爬去網(wǎng)頁內(nèi)容出現(xiàn)亂碼問題解決方法,2017-10-10

