在上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都行