Python Tensorflow/Keras教程保存/加载模型不工作

Python Tensorflow/Keras教程保存/加载模型不工作,python,tensorflow,keras,Python,Tensorflow,Keras,根据使用Tensorflow 1.11.0的教程,我无法保存简单的keras序列模型。我能够将模型配置转换为json字符串,并且能够保存权重,但不能保存整个模型 错误来自模型中的第一行代码。save检查self.\u is\u graph\u network是否True。我觉得我遗漏了一些基本的东西,但我无法理解。我相信我的代码类似于这里的教程代码:保存整个模型部分 Python 3.6.6 (default, Jun 28 2018, 05:43:53) [GCC 4.2.1 Compatib

根据使用Tensorflow 1.11.0的教程,我无法保存简单的keras序列模型。我能够将模型配置转换为json字符串,并且能够保存权重,但不能保存整个模型

错误来自
模型中的第一行代码。save
检查
self.\u is\u graph\u network
是否
True
。我觉得我遗漏了一些基本的东西,但我无法理解。我相信我的代码类似于这里的教程代码:保存整个模型部分

Python 3.6.6 (default, Jun 28 2018, 05:43:53)
[GCC 4.2.1 Compatible Apple LLVM 9.1.0 (clang-902.0.39.2)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>> import tensorflow.keras as tk
>>> mnist = tk.datasets.mnist
>>> (xtrain, ytrain), (xtest, ytest) = mnist.load_data()
>>> xtrain, xtest = xtrain/255.0, xtest/255.0
>>> model = tk.models.Sequential([tk.layers.Flatten(), tk.layers.Dense(64, activation=tf.nn.relu), \
tk.layers.Dense(10, activation=tf.nn.softmax)])
>>> model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
>>> model.fit(xtrain, ytrain, epochs=5)
Epoch 1/5
60000/60000 [==============================] - 2s 39us/step - loss: 0.3086 - acc: 0.9126
...
Epoch 5/5
60000/60000 [==============================] - 2s 37us/step - loss: 0.0715 - acc: 0.9787
<tensorflow.python.keras.callbacks.History object at 0x129819470>
>>> model.evaluate(xtest, ytest)
10000/10000 [==============================] - 0s 17us/step
[0.09259423367818817, 0.9711]
>>> model.save('m0x.h5')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/mmelton/Library/Python/3.6/lib/python/site-packages/tensorflow/python/keras/engine/n\
etwork.py", line 1358, in save
    raise NotImplementedError
NotImplementedError
>>> model._is_graph_network
False
>>> model.save_weights('w0.h5', save_format='h5')
>>>

>>> tf.__version__
'1.11.0'
>>> tk.__version__
'2.1.6-tf'
>>>
Python 3.6.6(默认值,2018年6月28日,05:43:53)
[GCC 4.2.1达尔文兼容苹果LLVM 9.1.0(clang-902.0.39.2)]
有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。
>>>导入tensorflow作为tf
>>>将tensorflow.keras导入为tk
>>>mnist=tk.datasets.mnist
>>>(xtrain,ytrain),(xtest,ytest)=mnist.load_data()
>>>xtrain,xtest=xtrain/255.0,xtest/255.0
>>>model=tk.models.Sequential([tk.layers.Flatten(),tk.layers.Dense(64,activation=tf.nn.relu))\
tk.layers.Dense(10,激活=tf.nn.softmax)])
>>>compile(优化器='adam',loss='sparse\u categorical\u crossentropy',metrics=['accurity'])
>>>model.fit(xtrain,ytrain,epochs=5)
纪元1/5
60000/60000[===================================================]2s 39us/步-损耗:0.3086-附件:0.9126
...
纪元5/5
60000/60000[===================================================]2秒37秒/步-损耗:0.0715-附件:0.9787
>>>模型评估(xtest、ytest)
10000/10000[=======================================]-0s 17us/步
[0.09259423367818817, 0.9711]
>>>model.save('m0x.h5')
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/Users/mmelton/Library/Python/3.6/lib/Python/site-packages/tensorflow/Python/keras/engine/n\
etwork.py”,保存中的第1358行
引发未实现的错误
未实现错误
>>>模型。\是\图\网络
假的
>>>model.save_weights('w0.h5',save_format='h5')
>>>
>>>tf.\u版本__
'1.11.0'
>>>tk.\u版本__
“2.1.6-tf”
>>>
我错过了什么

model = tk.models.Sequential([
    tk.layers.Flatten(), 
    tk.layers.Dense(64, activation=tf.nn.relu), 
    tk.layers.Dense(10, activation=tf.nn.softmax)
])

您的网络没有输入-
扁平化(输入形状=(784,)
。另外,将
flatte()
作为第一层有点滑稽,但如果你愿意,可以尝试使用它。

模型创建语句直接取自第一层中的代码,我可以使用它成功地进行拟合和评估。将参数
input\u shape(28,28,)
添加到
flatte
调用确实会生成一个我可以保存和加载的模型。那里发生了什么事?指定输入形状似乎会触发一个不明显的更改。@哦,有趣的是,教程是这样设置的。我猜想现在的情况是,模型是在没有指定输入形状的情况下编译的。这不是一个问题,因为您正在展平输入,并且在训练时根据输入形状调整输入尺寸。但是,当您尝试保存模型时,它无法推断输入尺寸,也无法正确保存图形。