使用matconvnet进行迁移学习(fine-tuning)的简单思路

使用matconvnet进行迁移学习(fine-tuning)的简单思路

使用matconvnet进行迁移学习(fine-tuning)的简单思路

matconvnet中用一般用init函数来生成一个struct结构体来定义网络 
参考作者给的轮子cnn_cifar_init.m中最后两层

% Block 5
net.layers{end+1} = struct('type', 'conv', 'weights', {{0.05*randn(1,1,64,10, 'single'), zeros(1,10,'single')}},'learningRate', .1*lr, 'stride', 1, 'pad', 0) ;

% Loss layer
net.layers{end+1} = struct('type', 'softmaxloss') ;

可以看出是一个输入64,卷积核1*1(保持不变),输出10(代表10类)的全连接层,再接一个softmax 
那么想匹配自己的数据的话,只需改动倒数第二层的输出就行了

即读取pre-train的网络后,手动删除结构体的最后两层,再加上自己修改的全连接层,和softmax便可

net.layers = net.layers(1:end-2);

net.layers{end+1} = struct('type', 'conv', 'weights',{{0.005*randn(1,1,64,5, 'single'), zeros(1,5,'single')}}, 'learningRate',.1*lr ,'stride', 1, 'pad', 0) ;

net.layers{end+1} = struct('type', 'softmaxloss') ;
posted @ 2018-03-30 22:32  菜鸡一枚  阅读(393)  评论(0)    收藏  举报