2016-03-31 1 views
2

Я хочу использовать предварительно проработанную нейронную сеть и точно настроить ее на конкретные нужды. Для этого я хотел использовать Python и структуру Lasagne. На:Как сделать слои лазанья непроницаемыми

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

Я нашел пример того, как использовать pretrained сеть для конкретных изображений. Моя проблема заключается в том, что я хотел бы использовать сеть, описанную в ссылке выше, в качестве отправной точки и добавить к ней последний слой, который заставляет его реализовать классификатор TWO CLASS , который мне нужен. Поэтому я хотел сохранить все слои в сети замороженными и позволить обучению ТОЛЬКО в моем последнем добавленном слое.

По-видимому, есть способ указать, что слои должны быть «непередаваемыми» в лазаньи, но я не нашел примеров того, как это сделать в Интернете.

Любые мысли об этом были бы высоко оценены.

ответ

2

Установите те слои, которые вы хотите заморозить, когда lr будет 0, и установите только тот слой, который вы хотите точно настроить lr, отличным от нуля. Пока еще нет онлайн-примера. Но вы должны проверить эту нить https://groups.google.com/forum/#!topic/lasagne-users/2z-6RrgiHkE

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) 

Код непроверенный. См. this discussion для получения дополнительной информации.