tensorflow - tf.saved_model.save(model, path_to_dir) 和 tf.keras.model.save 的区别

标签 tensorflow tensorflow2.0

我有一个 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/

    相关文章:

    tensorflow - 了解 tensorflow 分析结果

    tensorflow - 如何保存使用来自 Tensorflow 1.xx 的 .meta 检查点的模型作为一部分的 Tensorflow 2.0 模型?

    python - 多维张量切片

    python - Tensorflow 2.0 Keras 中过度兴奋激活值的正则化

    tensorflow - 如何在 tensorflow 2.0 中手动清除 tf.function 缓存(或管理最大大小)?

    tensorflow - Tensorflow r.1.1 中的 TrainingHelper 和 GreedyEmbeddingHelper 有什么区别(预测结果不同)?

    memory-management - 如何在 TensorFlow 分析器中获得详细的内存分解?

    tensorflow - 有什么方法可以将 tensorflow lite (.tflite) 文件转换回 keras 文件 (.h5)?

    python - tensorflow:保存和恢复 session

    tensorflow - 文本光束搜索解码器给出了所有结果