繁体   English   中英

如何使千层面层不可训练

[英]How to make Lasagne layers nontrainable

我想使用预训练的神经网络,并根据我的特定需求对其进行微调。 我想为此使用 Python 和 Lasagne 框架。 在:

https://github.com/Lasagne/Recipes/blob/master/examples/ImageNet%20Pretrained%20Network%20%28VGG_S%29.ipynb

我找到了一个关于如何对特定图像使用预训练网络的示例。 我的问题是我想使用上面链接中描述的网络作为起点,并为其添加最后一层,使其实现我需要的二级分类器。 因此,我想保持网络中的所有层冻结,并只允许在我最后添加的层中进行训练。

显然有一种方法可以表明千层面中的图层应该是“不可训练的”,但我在网上没有找到如何做到这一点的例子。

对此的任何想法将不胜感激。

将您想要用 lr 冻结的那些层设置为 0,并且只将您想要微调 lr 的那些层设置为非零。 目前还没有在线示例。 但你应该检查这个线程https://groups.google.com/forum/#!topic/lasagne-users/2z-6RrgiHkE

从要保持冻结的层的所有参数中删除trainable标签:

def freeze_layer(layer):
    for param in layer.params.values():
         param.remove('trainable')

要将所有网络冻结到某个层,您可以简单地迭代其较低层:

from lasagne.layers import get_all_layers

def freeze_net(net):
    layers = get_all_layers(net)
    for l in layers:
        freeze_layer(l)

代码未经测试。 有关更多信息,请参阅此讨论

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM