我有一个 keras 模型,想将它保存为 tensorflow 图。 tf.saved_model.save(model, path_to_dir)
有区别吗和 tf.keras.model.save
.
在这两个中,我想保存在 tensorflow
中保存的格式,不会使用 h5
格式。我明白 tf.saved_model.save
更通用,但如果我使用 keras
无论如何,这两个模型是不同的。
最佳答案
在一般情况下,应该没有任何区别。为了给出一个具体的答案,我们可以保存整个tf. keras
模型 - 一个是 TensorFlow 保存模型 另一个是 .h5
格式。
正如你所说,你有一个 keras
模型并想保存它的图形。你也可以这样做
Model.save
或 tf.keras.models.save_model
(1)
Model.save(
filepath,
overwrite=True,
include_optimizer=True,
save_format=None,
signatures=None,
options=None,
save_traces=True,
)
(2)
tf.keras.models.save_model(
model,
filepath,
overwrite=True,
include_optimizer=True,
save_format=None,
signatures=None,
options=None,
save_traces=True,
)
(3)
# tf.saved_model.save(model, path_to_dir)
tf.saved_model.save(model,
export_dir,
signatures,
options)
如您所见,它们都采用相同的论点。我建议选择 (1) 或 (2) ,易于遵循。这是一个例子,我在 CIFAR
上训练了一个函数模型数据集并用保存模型如下(1) 和 (2) 方法。func_model.fit(x_train, y_train, batch_size=128, epochs=2, verbose = 1)
1s/step - loss: 2.7365 - categorical_accuracy: 0.1088
1s/step - loss: 1.8353 - categorical_accuracy: 0.3905
# with (1)
func_model.save('/content/1/',
save_format='tf', save_traces=False)
INFO:tensorflow:Assets written to: /content/1/assets
INFO:tensorflow:Assets written to: /content/1/assets
# with (2)
tf.keras.models.save_model(func_model, '/content/2/',
save_format='tf', save_traces=False)
INFO:tensorflow:Assets written to: /content/2/assets
INFO:tensorflow:Assets written to: /content/2/assets
加载并重新训练它们from tensorflow.keras.models import load_model
x = load_model('.//1/')
y = load_model('.//2/')
x.fit(x_train, y_train, batch_size=128, epochs=1, verbose = 1)
1s/step - loss: 1.0963 - categorical_accuracy: 0.6780
y.fit(x_train, y_train, batch_size=128, epochs=1, verbose = 1)
1s/step - loss: 1.0963 - categorical_accuracy: 0.6780
还要注意有一个参数叫
save_traces
, 默认设置为 True
.我设置了False
因为我不想。新添加的,根据文档:save_traces: (only applies to SavedModel format) When enabled, the SavedModel will store the function traces for each layer. This can be disabled so that only the configs of each layer are stored. Defaults to True. Disabling this will decrease serialization time and reduce file size, but it requires that all custom layers/models implement a get_config() method.
另外仅供引用,当您保存整个模型时,我想提醒您使用
custom_object
如果您有自定义图层类的东西,则加载模型时的参数。new_moedl = keras.models.load_model(
"my_model", custom_objects={"CustomModel": CustomModel}
)
关于tensorflow - tf.saved_model.save(model, path_to_dir) 和 tf.keras.model.save 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66827371/