简体   繁体   English

tensorflow keras保存和加载模型

[英]tensorflow keras save and load model

I have run this example and I got the following error when I try to save the model. 我已经运行了此示例,尝试保存模型时出现以下错误。

import tensorflow as tf
import h5py
mnist = tf.keras.datasets.mnist

(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(),
  tf.keras.layers.Dense(512, activation=tf.nn.relu),
  tf.keras.layers.Dropout(0.2),
  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=2)
val_loss, val_acc = model.evaluate(x_test, y_test)
print(val_loss, val_acc)

model.save('model.h5')

new_model = tf.keras.models.load_model('model.h5')

I get this error: 我收到此错误:

Traceback (most recent call last):
File "/home/zneic/PycharmProjects/test/venv/test.py", line 23, in <module>
model.save('model.h5')
File "/home/zneic/.local/lib/python3.6/site-packages/tensorflow/python/keras/engine/network.py", line 1359, in save
'Currently `save` requires model to be a graph network. Consider '
NotImplementedError: Currently `save` requires model to be a graph network. Consider using `save_weights`, in order to save the weights of the model.

Your weights don't seem to be saved or loaded back into the session. 您的权重似乎没有保存或加载回会话中。 Can you try saving the graph and the weights separately and loading them separately? 您可以尝试分别保存图形和权重并分别加载吗?

model_json = model.to_json()
with open("model.json", "w") as json_file:
    json_file.write(model_json)

model.save_weights("model.h5")

Then you can load them: 然后,您可以加载它们:

def loadModel(jsonStr, weightStr):
    json_file = open(jsonStr, 'r')
    loaded_nnet = json_file.read()
    json_file.close()

    serve_model = tf.keras.models.model_from_json(loaded_nnet)
    serve_model.load_weights(weightStr)

    serve_model.compile(optimizer=tf.train.AdamOptimizer(),
                        loss='categorical_crossentropy',
                        metrics=['accuracy'])
    return serve_model

model = loadModel('model.json', 'model.h5')

I have the same problem, and I solved it. 我有同样的问题,我解决了。 I don't konw why, but it works. 我不知道为什么,但是可以。 You can modify as this: 您可以这样修改:

model = tf.keras.Sequential([
  layers.Flatten(input_shape=(28, 28)),
  layers.Dense(512, activation=tf.nn.relu, input_shape=(784,)),
  layers.Dropout(0.2),
  layers.Dense(10, activation=tf.nn.softmax)
])

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM