Caffe 网络权值可视化

对训练后的网络权值进行可视化可以判断模型的优劣及是否欠(过)拟合。经过良好训练的网络权值通常表现为美观,光滑;反之则表现为噪声图像,或者图案相关性太高,或者缺乏结构性,或有较多‘死’区域。

可视化代码只需要读取训练后的网络结构和权值文件,将各层的权值数据投影到像素空间即可。

主程序

clear;
clc;
close all;
addpath('matlab');

caffe.set_mode_cpu();
model_dir = 'models/bvlc_reference_caffenet/';
net_model = [model_dir 'deploy.prototxt'];
net_weights = [model_dir 'bvlc_reference_caffenet.caffemodel'];
phase = 'test'; % run with phase test (so that dropout isn't applied)

% Initialize a network
net = caffe.Net(net_model, net_weights, phase);

param_names={'conv1','conv2','conv3','conv4','conv5'};
for i=1:length(param_names)
    visualize_weight(net,param_names{i},1);
end

可视化函数

function visualize_weight(net,param_name,space)
w=net.params(param_name,1).get_data();
size(w)
nums=size(w,4);
channels=size(w,3);
width=size(w,2);
count=nums*channels;
n=ceil(sqrt(count));
weight_map=zeros(n*(width+space),n*(width+space),'uint8');
w=w-min(w(:));
w=w/max(w(:))*255;
w=uint8(w);
for i=0:count-1
    c=mod(i,n);
    r=floor(i/n);
    j=mod(i,channels)+1;
    k=floor(i/channels)+1;
    weight_map(r*(width+space)+(1:width),c*(width+space)+(1:width))=w(:,:,j,k);
end

figure;
imshow(weight_map);
title(param_name);

结果

第一个卷积层的卷积核参数大小为: 11×11×3×96
这里写图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值