2016-03-31 9 views
2

Ich möchte ein vortrainiertes neuronales Netzwerk verwenden und es nur an meine spezifischen Bedürfnisse anpassen. Ich wollte dafür Python und das Lasagne-Framework verwenden. On:Wie man Lasagne-Schichten nicht-rückführbar macht

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

fand ich ein Beispiel dafür, wie ein vortrainierte Netzwerk für bestimmte Bilder zu verwenden. Mein Problem ist, dass ich das Netzwerk verwenden möchte, das in der Verbindung oben als ein Startpunkt beschrieben wird, und eine letzte Schicht hinzufügen, die es einen ZWEI KLASSE Klassifizierer implementiert, was ich brauche. Ich wollte daher alle Layer im Netzwerk eingefroren halten und NUR in meiner zuletzt hinzugefügten Schicht trainieren.

Offenbar gibt es eine Möglichkeit, darauf hinzuweisen, dass Schichten in Lasagne "nontrainrain" sein sollten, aber ich habe keine Beweise gefunden, wie man das im Web macht.

Alle diesbezüglichen Gedanken wären sehr willkommen.

Antwort

2

Legen Sie die Ebenen, die mit lr eingefroren werden sollen, auf 0 fest, und legen Sie nur die Ebenen fest, für die Sie eine Feinabstimmung von lr ungleich Null vornehmen möchten. Es gibt noch kein Online-Beispiel. Aber Sie sollten diesen Thread überprüfen https://groups.google.com/forum/#!topic/lasagne-users/2z-6RrgiHkE

0

entfernen trainable Tag von allen Parametern der Schichten, die Sie wollen gefroren halten:

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

all Ihrem Netzwerk einfrieren bis zu einer bestimmten Schicht können Sie einfach durchlaufen seine untere Schichten:

from lasagne.layers import get_all_layers 

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

Code nicht getestet. Weitere Informationen finden Sie unter this discussion.