【问题标题】:How to make Lasagne layers nontrainable如何使千层面层不可训练
【发布时间】:2016-03-31 12:17:54
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: python lasagne


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      从要保持冻结的图层的所有参数中删除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)
      

      代码未经测试。请参阅this discussion 了解更多信息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-11
        • 1970-01-01
        • 2021-04-06
        相关资源
        最近更新 更多