关于MatConvNet框架下深度学习模型的保存(Deploy)问题

在MatConvNet框架下训练好的深度学习模型(Model)经:

net = cnn_imagenet_deploy(net) ;

得到的net是去掉Loss层,Dropout层与BN层的。下面是cnn_imagenet_deploy函数的部分源码:

isDag = isa(net, 'dagnn.DagNN') ;
if isDag
  dagRemoveLayersOfType(net, 'dagnn.Loss') ;
  dagRemoveLayersOfType(net, 'dagnn.DropOut') ;
else
  net = simpleRemoveLayersOfType(net, 'softmaxloss') ;
  net = simpleRemoveLayersOfType(net, 'dropout') ;
end

if isDag
  net.addLayer('prob', dagnn.SoftMax(), 'prediction', 'prob', {}) ;
else
  net.layers{end+1} = struct('name', 'prob', 'type', 'softmax') ;
end

if isDag
  dagMergeBatchNorm(net) ;
  dagRemoveLayersOfType(net, 'dagnn.BatchNorm') ;
else
  net = simpleMergeBatchNorm(net) ;
  net = simpleRemoveLayersOfType(net, 'bnorm') ;
end

因此在利用已经训练好的model进行fine-tuning的时候需要把已经去掉的层插入回去,下面以VGG16示例如下,把保存(Deploy)model时去掉的Loss层重新插入:


Dropout层和BN层与之类似。但是通常情况下,在Fine-tuning的情况下不再把BN层插入回去,一方面是因为BN层的参数被合并(通过某种映射)到BN层前一个卷积层的f与b参数内;另一方面,性能反而会变差,所以一般情况下,很少会把BN层再插入回去。

但是有一点需要注意的是,在训练模型(Model)的时候,如此保存的model: net-epoch-#.mat,其Loss层,Dropout层与BN层均没有去掉,以便从某个Epoch继续训练模型。



评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值