我已经尝试了文档中描述的所有选项,但没有一个允许我在 tensorflow 2.0.0 beta1 中保存我的模型。我也尝试升级到(同样不稳定的)TF2-RC,但这甚至破坏了我在测试版中工作的代码,所以我现在很快回滚到测试版。
请参阅下面的最小复制代码。
我尝试过的:
model.save("mymodel.h5")
Run Code Online (Sandbox Code Playgroud)NotImplementedError:将模型保存为 HDF5 格式要求模型是功能模型或顺序模型。它不适用于子类模型,因为此类模型是通过 Python 方法的主体定义的,该方法不能安全地序列化。考虑保存为 Tensorflow SavedModel 格式(通过设置 save_format="tf")或使用
save_weights.
model.save("mymodel", format='tf')
Run Code Online (Sandbox Code Playgroud)ValueError: Model < main .CVAE object at 0x7f1cac2e7c50> 无法保存,因为尚未设置输入形状。通常,输入形状是通过调用 .fit() 或 .predict() 自动确定的。要手动设置形状,请调用 model._set_inputs(inputs)。
3.
model._set_input(input_sample)
model.save("mymodel", format='tf')
Run Code Online (Sandbox Code Playgroud)
断言错误:tf.saved_model.save 在跟踪的@tf.function 中不受支持。将调用移动到外部急切执行的上下文。
这就是我现在卡住的地方,因为它没有给我任何合理的提示。那是因为我没有从@tf.function 调用 save() 函数,我已经从可能的最外层范围调用了它。事实上,我在下面这个最小的复制脚本中根本没有 @tf.function 并且仍然遇到相同的错误。
所以我真的不知道如何保存我的模型,我已经尝试了所有选项,但它们都抛出错误并且没有提供任何提示。
如果您设置 save_model=False,下面的最小复制示例工作正常,并且在 save_model=True 时它会重现错误。
在这个简化的自动编码器代码示例中似乎没有必要使用子类模型,但我在我需要的原始 VAE 代码中添加了许多自定义函数。
代码:
import tensorflow as tf
save_model = True
learning_rate = 1e-4
BATCH_SIZE = 100
TEST_BATCH_SIZE = 10
color_channels = 1
imsize = 28
(train_images, …Run Code Online (Sandbox Code Playgroud)