2

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

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

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

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

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

4

2 回答 2

2

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

于 2016-04-08T22:35:12.650 回答
0

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)

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

于 2018-02-07T15:04:00.203 回答