import tensorflow as tf
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train = tf.keras.utils.normalize(x_train, axis=1)
x_test = tf.keras.utils.normalize(x_test, axis=1)
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(128,activation=tf.nn.relu))
model.add(tf.keras.layers.Dense(128,activation=tf.nn.relu))
model.add(tf.keras.layers.Dense(10,activation=tf.nn.softmax))
model.compile(optimizer ='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
model.fit(x_train, y_train, epochs=3)
Quand j'ai essayé de sauvegarder le modèle
model.save('epic_num_reader.model')
Je reçois une erreur NotImplementedError:
NotImplementedError Traceback (most recent call last)
<ipython-input-4-99efa4bdc06e> in <module>()
1
----> 2 model.save('epic_num_reader.model')
NotImplementedError: Currently `save` requires model to be a graph network. Consider using `save_weights`, in order to save the weights of the model.
Alors, comment puis-je sauvegarder le modèle défini dans le code?
Vous avez oublié l'argument input_shape
dans la définition de la première couche, ce qui rend le modèle non défini et l'enregistrement des modèles non définis n'a pas encore été implémenté, ce qui déclenche l'erreur.
model.add(tf.keras.layers.Flatten(input_shape = (my, input, shape)))
Ajoutez simplement le input_shape
à la première couche et cela devrait fonctionner correctement.
Pour ceux qui n'ont toujours pas résolu le problème, même comme l'a suggéré Matias, vous pouvez envisager d'utiliser tf.keras.models.save_model()
et load_model()
. Dans mon cas, cela a fonctionné.
tf.keras.models.save_model
Fonctionne ici (tensorflow 1.12.0) (même lorsque la forme_entrée n'est pas spécifiée)
J'avais la même erreur et j'ai essayé les réponses ci-dessus, mais j'ai eu des erreurs. Mais je trouve une solution au problème que je vais partager ci-dessous:
Vérifiez si vous avez transmis input_shape lors de la définition de la couche d'entrée du modèle, sinon vous obtiendrez une erreur lors de l'enregistrement et du chargement du modèle.
Considérons l'exemple suivant Si vous utilisez le jeu de données minst:
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
Il consiste en des images de chiffres manuscrits de 0 à 9 de résolution 28 x 28 chacun ..__ Pour cela, nous pouvons définir la forme d'entrée comme (28,28) sans mentionner la taille du lot de la manière suivante:
model.add(tf.keras.layers.Flatten(input_shape=(28,28)))
De cette façon, vous pouvez donner forme à l’entrée en consultant votre ensemble de données d’entraînement.
Maintenant, après avoir formé et testé le modèle, nous pouvons enregistrer notre modèle. Le code suivant a fonctionné pour moi mais il n’a pas changé l’exactitude après le rechargement du modèle:
en utilisant save_model ()
import tensorflow as tf
tf.keras.models.save_model(
model,
"your_trained_model.model",
overwrite=True,
include_optimizer=True
)
en utilisant .save ()
your_trained_model.save('your_trained_model.model')
del model # deletes the existing model
model2 = tf.keras.models.load_model("your_trained_model.model")
Pour plus de détails, consultez ce lien: Explication d’entrée Keras: input_shape, unités, batch_size, dim, etc.