tensorflow keras保存和加载模型

tensorflow keras保存和加载模型,tensorflow,model,keras,save,load,Tensorflow,Model,Keras,Save,Load,我已经运行了这个示例,当我试图保存模型时,出现了以下错误 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.ker

我已经运行了这个示例,当我试图保存模型时,出现了以下错误

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')
我得到这个错误:

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.
回溯(最近一次呼叫最后一次):
文件“/home/zneic/PycharmProjects/test/venv/test.py”,第23行,在
model.save('model.h5')
保存中的文件“/home/zneic/.local/lib/python3.6/site packages/tensorflow/python/keras/engine/network.py”,第1359行
'当前'save'要求模型为图形网络。考虑
NotImplementedError:当前“save”要求模型为图形网络。考虑使用“SaveHuff权重”,以节省模型的权重。

您的体重似乎没有保存或加载回训练中。你能试着分别保存图表和权重并分别加载它们吗

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

model.save_weights("model.h5")
然后您可以加载它们:

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')

我也有同样的问题,我解决了。我不知道为什么,但它起作用了。您可以按以下方式进行修改:

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)
])

您应该定义第一层的输入形状。该层的可能副本是的副本。文档似乎没有指定必须指定输入形状或模型“未定义”。这只是回避了问题。
model.save(“model.h5”)
方法似乎无法像广告中所宣传的那样工作。每个mnist数字图片有28*28像素,因此如果要使用save功能,我想模型必须具有明确的输入形状。