Matconvnet 的一些记录
Example code from ADNet: Action-Decision Networks for Visual Tracking with Deep Reinforcement Learning [Paper]
GitHub:https://github.com/hellbell/ADNet
1. 加载一个模型,然后去掉某些层,,如将 Conv + fc 改为 全卷机的(only Conv):
function [net, net_conv, net_fc] = split_dagNN(net)
net.move('cpu');
net_fc = copy(net);
net_conv = copy(net);
% remove the fc layers, only the convolutional layers remained.
layer_names = {};
for ii = 1 : 10
layer_names{ii} = net_fc.layers(ii).name;
end
net_fc.removeLayer(layer_names);
net_fc.rebuild();
% remove the convolutional layers, and only the fc layers remained.
layer_names = {};
for ii = 11 : numel(net.layers)
layer_names{ii-10} = net_conv.layers(ii).name;
end
net_conv.removeLayer(layer_names);
net_conv.rebuild();
net.move('gpu');
net_fc.rebuild();
2. 得到特定 layer 的索引和值(index 和 value):
tutorial from:http://www.vlfeat.org/matconvnet/quick/
% run the CNN
net.eval({'data', im_}) ;
% obtain the CNN otuput
scores = net.vars(net.getVarIndex('prob')).value ; %% net.getVarIndex('prob')---> 是分类输出概率的那个 layer 的index XXX,然后 net.var(XXX).value 输出的是:对应 XXX 的特定概率值。
scores = squeeze(gather(scores)) ; %% gather 应该是将 GPU data 转为 CPU data 的方法
3.