深度学习Caffe实战笔记(17)MATLAB实现卷积层卷积核权重的可视化

来源:互联网 发布:linux vi 到文件底部 编辑:程序博客网 时间:2024/05/29 16:11

上一篇博客介绍了如果可视化第一个卷积层的卷积核,可视化的一个重要作用就是判断训练权重的好坏,效果图可以参考我上一篇博客,这篇博客介绍把卷积核可视化写成MATLAB的一个函数,用来直接调用就可以实现卷积核权重的可视化,直接放MATLAB代码。

函数内容:

function []=visualize_weights(w,s)h=max(size(w,1),size(w,2));   %卷积和大小g=h+s;    %网格大小w=w-min(min(min(min(w))));w=w/max(max(max(max(w))))*255;w=uint8(w);W=zeros(g*size(w,3),g*size(w,4));for u=1:size(w,3)    for v=1:size(w,4)        W(g*(u-1)+(1:h),g*(v-1)+(1:h))=w(:,:,u,v)';    endendW=uint8(W);figure;imshow(W);end

主函数内容:

clc;clear;close all;addpath('../../../../matlab');caffe.set_mode_cpu();net=caffe.Net('alexnetdeploy.prototxt','cloth_iter_100000.caffemodel','test');net.layer_namesnet.blob_names  %第一个卷基层可视化conv1_layer=net.layer_vec(1);  blob1=conv1_layer.params(1);    %注意只有卷积层是有参数的w=blob1.get_data();size(w)visualize_weights(w,1);%第二个卷积层可视化conv2_layer=net.layer_vec(5);blob2=conv2_layer.params(1);w2=blob2.get_data();size(w2)visualize_weights(w2,1);%第三个卷积层可视化conv3_layer=net.layer_vec(9);blob3=conv3_layer.params(1);w3=blob3.get_data();size(w3)visualize_weights(w3,1)%第四个卷积层可视化conv4_layer=net.layer_vec(11);blob4=conv4_layer.params(1);w4=blob4.get_data();size(w4)visualize_weights(w4,1)%第五个卷积层可视化conv5_layer=net.layer_vec(13);blob5=conv5_layer.params(1);w5=blob5.get_data();size(w5)visualize_weights(w5,1)

效果图:

这里写图片描述

其实只有第一个卷积层可视化效果最好,后面的卷积层权重可视化可读性不太强。

参考文献:《深度学习21天实战caffe》赵永科

1 0