如何在 Tensorflow 中保存不可序列化的模型

菜鳥

我創建了一個帶有自定義層的模型,其中包含矩陣運算和類似的東西。我現在想在訓練後保存我的模型。我試過了:

model.save("model.h5", save_format='tf')

但是出現了一個錯誤:

NotImplementedError: Saving the model to HDF5 format requires the model to be 
a Functional model or a Sequential model. It does not work for subclassed models, 
because such models are defined via the body of a Python method, which isn't safely serializable.
Consider saving to the Tensorflow SavedModel format (by setting save_format="tf") or using `save_weights`.

我發現了一些有用的東西:

checkpoint_path = "checkpoints"

ckpt = tf.train.Checkpoint(model=model,
                           optimizer=optimizer)

ckpt_manager = tf.train.CheckpointManager(ckpt, checkpoint_path, max_to_keep=5)

# if a checkpoint exists, restore the latest checkpoint.
if ckpt_manager.latest_checkpoint:
  ckpt.restore(ckpt_manager.latest_checkpoint)

我的問題是:通過使用這種方式,我可以做與保存可序列化模型(如順序模型)相同的事情,或者這個檢查點用於其他目的?

單獨在一起

實際上有兩種格式可以用來保存模型。您可以簡單地使用較舊的 Keras H5 格式保存模型,model.save("test", save_format='h5')也可以Tensorflow SavedModel format通過顯式設置model.save("test", save_format='tf')或簡單地使用model.save("test"),因為tf調用時默認使用格式model.save使用model.save("model.h5", save_format='tf'),您似乎試圖同時使用這兩種格式,這看起來不起作用。使用該tf格式保存模型應該可以。可以在此處找到更多信息例如,以下模型只能在使用model.save時保存model.save("test", save_format='tf')

import tensorflow as tf

class SomeModel(tf.keras.Model):

  def __init__(self):
    super(SomeModel, self).__init__()
    self.dense1 = tf.keras.layers.Dense(4, activation=tf.nn.relu, )
    self.dense2 = tf.keras.layers.Dense(5, activation=tf.nn.softmax)

  def call(self, inputs):
    x = self.dense1(inputs)
    return self.dense2(x)

model = SomeModel()
model.compute_output_shape(input_shape=(1,1))
model.save("model")

調用model.save("test", save_format='h5')或者model.save("test.h5")甚至model.save("model.h5", save_format='tf')在這個子類模型上都會導致錯誤。

Checkpoints當您需要中斷訓練或它崩潰並且您想從保存的狀態恢復訓練模型時,這尤其有用。在推理過程中,您可以輕鬆加載模型的最新檢查點並進行預測,而無需重新編譯它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在联邦的Tensorflow中保存模型

如何在theano中保存/序列化受过训练的模型?

如何在Tensorflow中保存多层感知器模型

如何保存tensorflow在PHP中保存模型多个文件

Tensorflow:如何在训练中我想要的步骤中保存模型

如何在序列化程序验证/在DRF中保存之前添加其他数据?

如何在Java中保存对象?构造函数中的反序列化

如何不在Tensorflow Keras中保存模型优化器?

如何在Tensorflow训练的图形中保存操作节点的输出?

如何在Tensorflow中保持堆叠张量

如何在Gson序列化中保持字段顺序

如何在类内使用私有方法反序列化PyTorch保存的模型?

如何在TensorFlow中更改模型参数?

如何在Tensorflow中重用模型

如何在Tensorflow中使用多个模型

TensorFlow:如何在Tensorflow训练模型中找到输出节点?

Tensorflow:如何在模型中添加正则化

如何在C#中保存并追加到序列化的MessagePack二进制文件?

如何在Java中使字段不可序列化?

如何在TensorFlow中添加正则化?

Tensorflow:如何保存/恢复模型?

如何在Java中序列化不可序列化?

如何在Django中序列化模型实例?

如何在TensorFlow 2.x中加载Tensorflow 1.x保存的模型?

在内存中序列化和反序列化Tensorflow模型并继续训练

如何在Unity中序列化和保存GameObject

由于保存模型而导致训练崩溃:“ tensorflow.GraphDef在序列化过程中被同时修改”

如何仅在Tensorflow2中保存张量而不是模型

如何获得序列化模型的主键?