1. 程式人生 > >深度學習Caffe實戰(16)MATLAB實現模型引數權重視覺化

深度學習Caffe實戰(16)MATLAB實現模型引數權重視覺化

前面部落格中介紹了怎麼樣利用MATLAB實現特徵圖的視覺化,那一篇部落格中介紹了一個對權重視覺化的部落格,本來不打算寫這個部落格了,但是我仔細看了那一篇部落格,有點繁瑣,所以我又整理了一下用MATLAB實現模型引數權重視覺化的部分,這一篇介紹對第一個卷積層權重視覺化,下一篇部落格介紹Alexnet中2到5卷積層的視覺化,請大家注意,只有卷積層才能視覺化。
通過對訓練後的模型進行視覺化可以判斷模型的優劣,怎麼判斷直接看博文後面的效果圖,一看便知。直接放MATLAB程式碼,基於Alexnet,模型是前面介紹內容訓練出來的模型,這個模型訓練的不好,從引數權重圖上就可以看出來,最後我會做一個好的和壞的第一個卷積層的引數視覺化效果圖,用於對比,如果想要視覺化其它網路模型,只需要修改相應的部分就行,這裡不再贅述。

clc;
clear;
close all;
addpath('../../../../matlab');
caffe.set_mode_cpu();
net=caffe.Net('alexnetdeploy.prototxt','cloth_iter_100000.caffemodel','test');
net.layer_names      %顯示都有哪些層
net.blob_names    
conv1_layer=net.layer_vec(1);  
blob1=conv1_layer.params(1);    %注意只有卷積層是有引數的
w=blob1.get_data();
size(w)
W=zeros(11
*3,11*96); for u=1:3 for v=1:96 W(11*(u-1)+(1:11),11*(v-1)+(1:11))= w(:,:,u,v)'; end end W=W-min(min(W)); W=W/(max(max(W)))*255; %從0-1轉換到255 W=uint8(W); W=[W,zeros(size(W,1),4*11)]; WW=cat(3,W(1:11,:),W(12:22,:),W(23:33,:)); W=zeros(10*12,10*12,3); for u=1:10 for v=1:10 W((u-1
)*12+(1:11),(v-1)*12+(1:11),:)=WW(:,(u-1)*11*10+(v-1)*11+(1:11),:); end end W=uint8(W); figure; imshow(W);

效果圖:
這裡寫圖片描述

上面這是一個不好的效果圖,因為圖案類似噪音太嚴重,不夠平滑,不夠美觀。

這裡寫圖片描述

這一張權重圖是bvlc_reference_caffenet.caffemodel的權重圖,這個效果圖比較平滑,也可以觀察到一部分權重負責提取高頻灰度特徵,而另一些負責提取低頻彩色特徵。哪個好哪個壞,一看便知,這也是視覺化權重的一個重要作用。