寻求开源的实现/迁移学习

开源不但要下载源码还要下载相应权重。

4fb0708319f048ec9685059404da12c6.png

小训练集:

思路:可以在有1000类物体的ImageNet数据库上训练,因此该网络有一个可以输出千分之一类别概率的softmax神经元。我们能做的就是去掉其softmax层然后创造自己的softmax层来输出Tigger/Misty/其他(识别自己的猫,Tigger Misty为猫名)。

我建议冻结前面这些层,即冻结相应参数(该网络前面所有层的参数),可以只训练与你自己softmax层有关的参数,即与三个类别输出有关的softmax层。
通过用别人训练好的权重即使在很小的数据库上也可能得到很好的性能

方法:可以把前面某些层设置可训练参数为0。另一种说法是不要训练这些权重,或有时你可以用一个参数例如freeze=1来设置网络。这些不同的方法和不同的深度学习框架可以让你来确定是否训练与某些具体层相关的权重。在这个例子中你可以只训练softmax层的权重同时冻结前面所有层。
另一种应用中比较巧妙的方法是由于前面所有层被冻结了,之前有些固定函数不会变,因为你现在也不改动它也不训练它,因此网络接受输入图像x并把x映射到该层的激活函数上。这个方法可以加速训练,因为我们刚预计算过该层,而该层重激活产生的特征就直接保存在硬盘上。你所做的就是用这个固定函数在该神经网络的前半部分接受任一输入图像X然后计算其特征向量,然后依据这个特征向量训练一个浅层softmax模型去预测。因此预计算之前层的激活结果是有利于你计算的,操作(预计算)训练集所有样本(激活结果)并存到硬盘上,然后训练右边的softmax类别。

预计算的好处是你不需要在训练集上每次迭代都重新计算这些激活结果。所以如果你的训练集比较小,以上就是你可以做的工作。

大训练集:

如果你的训练集更大,一个经验之谈是如果你有更大的带标签的数据集比如许多Tigger图片或者Misty图片或者别的猫的图片,你可以冻结更少的层数。你可以只冻结前面的这些层,然后训练后面这些层,尽管输出层的类别与你需要的不同。

你可以用最后几层的权重作为初始化开始做梯度下降(训练),或者你也可以去掉最后几层,然后用自己的新神经元和最终softmax输出(训练)。两种方法都值得尝试。

 

有个模式即你数据越多,所冻结的层数可以越少,自己训练的层数可以越多。其中的想法就是如果你选了个数据集,有足够的数据,不仅可以训练单层softmax还可以训练由所采用网络最后几层组成的中型网络,其中的最后几层你可以使用。

最后如果你有很多数据,你可以用该开源网络和权重初始化整个网络然后训练。尽管这是个1000类的softmax而你只需要3类,你需要自己的softmax输出自己想要的标签。你有越多的带标签数据或者说有越多TiggerMisty或其他猫的图片你可以训练的层数越多。


极端的例子是你可以用下载的权重作为初始化,因此这些权重可以代替随机初始化然后做梯度下降训练来更新所有权重和网络层。

迁移学习可以一直在cv中考虑。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值