2016-12-10 3 views
0

J'essaie de prendre la dernière couche d'un modèle (ancien modèle) et de faire un nouveau modèle d'une seule couche (nouveau modèle) qui a exactement les mêmes paramètres que la dernière couche de l'ancien modèle. Je veux le faire d'une manière agnostique à ce que la dernière couche de l'ancien modèle se trouve être. J'essaye de le faire avec ce code, mais je reçois une erreur.Copie des paramètres d'une couche dans 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)) 

Cela donne l'erreur suivante:

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

Si je vérifie la dernière couche oldModel, il me montre ceci:

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

J'ai essayé d'ajouter output_dim à la liste des paramètres Je copie de cette façon, mais cela n'a pas semblé aider. Il m'a donné cette erreur au lieu quand je l'ai fait:

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

Toute idée de ce que je fais mal ici?

Répondre

0

J'ai trouvé la réponse moi-même. Si, au lieu de rendre la forme input_shape identique à la forme input_shape de la dernière couche de l'ancien modèle, je la transforme en output_shape de l'avant-dernière couche et ne spécifie que [1:] de ce tableau de sortie, cela fonctionne. Le code qui fonctionne est le suivant:

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