2016-12-10 1 views
0

Ich versuche, die letzte Ebene in einem Modell (altes Modell) zu nehmen und ein neues Modell von nur einer Ebene (neues Modell) zu erstellen, das genau dieselben Parameter wie die letzte Ebene hat das alte Modell. Ich möchte das auf eine Weise tun, die nichts mit der letzten Schicht des alten Modells zu tun hat. Ich versuche es mit diesem Code zu tun, erhalte aber einen Fehler.Kopieren von Parametern einer Ebene in Keras

newModel = Sequential() 
newModel.add(type(oldModel.layers[-1])(oldModel.layers[-1].output_shape, 
              activation=oldModel.layers[-1].activation, 
              input_shape=oldModel.layers[-1].input_shape)) 

dass der folgende Fehler ergibt:

TypeError: __init__() missing 1 required positional argument: 'output_dim' 

Wenn ich die letzte Schicht in oldModel überprüfen, es zeigt mir dies: der Parameter

full_model.model.layers[-1] 
>>>> <keras.layers.core.Dense at 0x7fe22010e128> 

ich versucht, indem output_dim zur Liste Ich kopiere auf diese Weise, aber das schien nicht zu helfen. Es gab mir diesen Fehler statt, als ich das tat:

Exception: Input 0 is incompatible with layer dense_8: expected ndim=2, found ndim=3 

Irgendeine Idee, was ich hier falsch mache?

Antwort

0

Die Antwort gefunden. Wenn ich, anstatt die Eingabeform gleich der Eingabeform der letzten Ebene des alten Modells zu machen, die output_shape der vorletzten Ebene des alten Modells mache und nur [1:] dieses Ausgabe-Arrays vorschlage, funktioniert es. Code, der funktioniert, ist wie folgt:

newModel.add(type(oldModel.layers[-1])(oldModel.layers[-1].output_shape, 
             activation=oldModel.layers[-1].activation, 
             input_shape=oldModel.layers[-2].output_shape[1:])) 
Verwandte Themen