我想使用预训练的神经网络,并根据我的特定需求对其进行微调。我想为此使用 Python 和 Lasagne 框架。上:
我找到了一个如何将预训练网络用于特定图像的示例。我的问题是,我想使用上面链接中描述的网络作为起点,并为其添加最后一层,使其实现我需要的两个分类器。因此,我想冻结网络中的所有层,并只允许在我最后添加的层中进行训练。
显然有一种方法可以表明层在千层面中应该是“不可训练的”,但我没有在网上找到如何做到这一点的例子。
对此的任何想法将不胜感激。
我想使用预训练的神经网络,并根据我的特定需求对其进行微调。我想为此使用 Python 和 Lasagne 框架。上:
我找到了一个如何将预训练网络用于特定图像的示例。我的问题是,我想使用上面链接中描述的网络作为起点,并为其添加最后一层,使其实现我需要的两个分类器。因此,我想冻结网络中的所有层,并只允许在我最后添加的层中进行训练。
显然有一种方法可以表明层在千层面中应该是“不可训练的”,但我没有在网上找到如何做到这一点的例子。
对此的任何想法将不胜感激。
将要使用 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)
未经测试的代码。有关更多信息,请参阅此讨论。