在上Andrew Ng的課的時候搜集到了課程里面自帶的顯示NN參數的代碼,但是只能顯示灰度圖,而且NN里的參數沒有通道的概念。所以想要獲得可視化CNN的參數,並且達到彩色的效果就不行了。
所以就自己寫了一個,對了,是Matlab腳本哈。
function olDisplayFilter(filter, pad)
%% !Only Show the 1st-3rd channel of filter
%%
if nargin == 1
% Between images padding
pad = 1;
end
[M, N, P, Q] = size(filter);
width = ceil(sqrt(Q));
displayArray = zeros(pad + width * (M+pad), pad + width* (N+pad), 3);
count = 1;
for i = 1 : width
for j =1 : width
if count > Q
break;
end
f_ = filter(:, :, 1:3, count);
absMinVal = abs(min(f_(:)));
f_ = f_ + absMinVal;
absMaxVal = max(abs(f_(:)));
f_ = f_ / absMaxVal;
displayArray(pad + (i - 1) * (M + pad) + (1 : M),...
pad + (j - 1) * (N + pad) + (1: N), :) ...
= f_;
count = count + 1;
end
end
imagesc(displayArray, [-1, 1]);
axis image off
drawnow;
end
最后得到的效果就是這個樣子的:
這個圖是加載了imagenet的訓練結果第一層參數的效果圖,訓練結果下載地址在這里:
http://www.vlfeat.org/matconvnet/models/imagenet-vgg-f.mat
下載完成這個mat文件后,如果想復現上面這個圖的話運行一下這句話:olDisplayFilter(layers{1}.filters) 就可以了。
另外要是對前面提到的Andrew Ng課程里面顯示神經網絡參數的代碼感興趣的話,可以戳https://github.com/OleNet/OleNetLib/tree/master/MatLiB,里面的olDisplayNetwork.m和olDisplayData.m都行

