roh*_*jan 11 tensorflow tensorflow2.0
我有一个 keras 模型,想将其保存为张量流图。tf.saved_model.save(model, path_to_dir)和之间有区别吗tf.keras.model.save。
在这两个中,我想以tensorflow保存的格式保存并且不会使用h5格式。我理解tf.saved_model.save是更通用的,但如果我使用keras模型,这两个无论如何都是不同的。
一般情况下,应该没有什么区别。为了给出具体的答案,我们可以保存整个tf. keras模型——一种是TensorFlow SavedModel,另一种是.h5format。
正如您所说,您有一个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)
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,他们都持有相同的论点。我建议选择(1)或(2),易于遵循。这是一个例子,我在数据集上训练了一个函数模型,并使用(1)和(2)CIFAR方法保存模型,如下所示。
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
Run Code Online (Sandbox Code Playgroud)
加载并重新训练它们
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
Run Code Online (Sandbox Code Playgroud)
另请注意,有一个名为 的参数save_traces,默认情况下,它设置为True。我把它设置False为我不想的。根据文档,新添加:
save_traces:(仅适用于SavedModel格式)启用后,SavedModel将存储每个层的函数轨迹。可以禁用此功能,以便仅存储每层的配置。默认为 True。禁用此功能将减少序列化时间并减少文件大小,但它要求所有自定义层/模型实现 get_config() 方法。
custom_object另外仅供参考,当您保存整个模型时,如果您有自定义的类似图层的内容,我想提醒您在加载模型时使用该参数。
new_moedl = keras.models.load_model(
"my_model", custom_objects={"CustomModel": CustomModel}
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8015 次 |
| 最近记录: |