說明 :本文**
通過前面的學習,我們已經能夠正常訓練各種資料了。設定好solver.prototxt後,我們可以把訓練好的模型儲存起來,如lenet_iter_10000.caffemodel。 訓練多少次就自動儲存一下,這個是通過snapshot進行設定的,儲存檔案的路徑及檔名字首是由snapshot_prefix來設定的。這個檔案裡面存放的就是各層的引數,即net.params,裡面沒有資料(net.blobs)。順帶還生成了乙個相應的solverstate檔案,這個和caffemodel差不多,但它多了一些資料,如模型名稱、當前迭代次數等。兩者的功能不一樣,訓練完後儲存起來的caffemodel,是在測試階段用來分類的,而solverstate是用來恢復訓練的,防止意外終止而儲存的快照(有點像斷點續傳的感覺)。
既然我們知道了caffemodel裡面儲存的就是模型各層的引數,因此我們可以把這些引數提取出來,進行視覺化,看一看究竟長什麼樣。
我們先訓練cifar10資料(mnist也可以),迭代10000次,然後將訓練好的 model儲存起來,名稱為my_iter_10000.caffemodel,然後使用jupyter notebook 來進行視覺化。
在此順便問一下各位大牛:如何在cnblogs中,發表jupyter notebook生成的文章?
首先,匯入必要的庫
in [1]:
importin [2]:numpy
asnp
import
matplotlib.pyplot
asplt
importos,
sys,
caffe
%matplotlib inline
caffe_rootin [3]:='/home/lee/caffe/'os.
chdir
(caffe_root
)sys
.path
.insert(0
,caffe_root
+'python'
)
plt設定網路模型,並顯示該模型中各層名稱和引數的規模(注意此處是net.params, 而不是net.blobs).rcparams
['figure.figsize']=
(8,8
)plt
.rcparams
['image.interpolation']=
'nearest'
plt.
rcparams
['image.cmap']=
'gray'
in [4]:
net=caffe
.net
(caffe_root
+'examples/cifar10/cifar10_full.prototxt'
,caffe_root
+'examples/cifar10/my_iter_10000.caffemodel'
,caffe
.test)[(
k,v[
0].data
.shape
)fork,
vinnet.
params
.items
()]
[('conv1', (32, 3, 5, 5)),cifar10訓練的模型配置在檔案cifar10_full.prototxt裡面,共有三個卷積層和乙個全連線層,引數規模如上所示。('conv2', (32, 32, 5, 5)),
('conv3', (64, 32, 5, 5)),
('ip1', (10, 1024))]
in [5]:
#編寫乙個函式,用於顯示各層的引數in [6]:defshow_feature
(data
,padsize=1
,padval=0
):data
-=data
.min
()data
/=data
.max
()# force the number of filters to be squaren=
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
))# tile 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'
)
# 第乙個卷積層,引數規模為(32,3,5,5),即32個5*5的3通道filterweight
=net
.params
["conv1"][0
].data
weight
.shape
show_feature
(weight
.transpose(0
,2,3
,1))
(32, 3, 5, 5)引數有兩種型別:權值引數和偏置項。分別用params["conv1"][0] 和params["conv1"][1] 表示 。
我們只顯示權值引數,因此用params["conv1"][0]
in [7]:
# 第二個卷積層的權值引數,共有32*32個filter,每個filter大小為5*5weight
=net
.params
["conv2"][0
].data
weight
.shape
show_feature
(weight
.reshape(32
**2,5
,5))
(32, 32, 5, 5)
in [8]:
# 第三個卷積層的權值,共有64*32個filter,每個filter大小為5*5,取其前1024個進行視覺化
weight=net
.params
["conv3"][0
].data
weight
.shape
show_feature
(weight
.reshape(64
*32,5
,5)[:1024
])
(64, 32, 5, 5)
caffe模型視覺化
通過前面的學習,我們已經能夠正常訓練各種資料了。設定好solver.prototxt後,我們可以把訓練好的模型儲存起來,如lenet iter 10000.caffemodel。訓練多少次就自動儲存一下,這個是通過snapshot進行設定的,儲存檔案的路徑及檔名字首是由snapshot prefix...
Caffe網路視覺化
最近在學習caffe,但是作為曾經的windows深度使用者,還是比較習慣視覺化的介面。然而,caffe當然是在linux os x系統下更好啦,因為一般還是寫script在命令列裡面玩的。所以這樣就不直觀咯,為了能直觀地看清楚網路結構,而不是看prototxt腦補 視覺化就很重要了。幸好,開發ca...
caffe學習 caffemodel視覺化
網路架構的形象展示 在構建完網路後,我們得到乙個xx train.prototxt檔案,該檔案中記錄著每層網路的輸入輸出及規格等引數,在位址 左側拖入xx train.ptototxt檔案,按enter shift組合鍵即可檢視網路模型圖,非常具體形象.以lenet為例 lenet prototxt...