gpt4 book ai didi

python - 保存自定义 TableNet 模型(基于 VGG19)以进行表提取 - Azure Databricks

转载 作者:行者123 更新时间:2023-12-02 06:00:35 34 4
gpt4 key购买 nike

我有一个基于 TableNet 的模型和 VGG19 ,用于训练的数据(Marmoot)和保存路径映射到datalake存储(使用Azure)。

我尝试通过以下方式保存它,并在 Databricks 上收到以下错误:

  1. 第一种方法:

    import pickle
    pickle.dump(model, open(filepath, 'wb'))

    这将保存模型并给出以下输出:

    WARNING:absl:Found untraced functions such as _jit_compiled_convolution_op, _jit_compiled_convolution_op, _jit_compiled_convolution_op, _jit_compiled_convolution_op, _jit_compiled_convolution_op while saving (showing 5 of 31). These functions will not be directly callable after loading.

    现在,当我尝试使用以下命令重新加载模式时:

    loaded_model = pickle.load(open(filepath, 'rb'))

    我收到以下错误(Databricks 除了以下错误之外还显示整个 stderr 和 stdout,但这就是要点):

    ValueError: Unable to restore custom object of type _tf_keras_metric. Please make sure that any 
    custom layers are included in the `custom_objects` arg when calling `load_model()` and make
    sure that all layers implement `get_config` and `from_config`.
  2. 第二种方法:

    model.save(filepath)

    并且我收到以下错误:

    Fatal error: The Python kernel is unresponsive.
    The Python process exited with exit code 139 (SIGSEGV: Segmentation fault).

    The last 10 KB of the process's stderr and stdout can be found below. See driver logs for full logs.
    ---------------------------------------------------------------------------
    Last messages on stderr:
    Mon Jan 9 08:04:31 2023 Connection to spark from PID 1285
    Mon Jan 9 08:04:31 2023 Initialized gateway on port 36597
    Mon Jan 9 08:04:31 2023 Connected to spark.
    2023-01-09 08:05:53.221618: I tensorflow/core/platform/cpu_feature_guard.cc:193] This
    TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the
    following CPU
    instructions in performance-critical operations: AVX2 FMA

    而且,很难从所有 stderr 和 stdout 中找到正确的错误位置。它显示了整个 stderr 和 stdout,这使得很难找到解决方案(它显示了所有 stderr 和 stdout,包括训练和所有内容)

  3. 第三种方法(部分):

    我也尝试过:

    model.save_weights(weights_path)

    但我再次无法重新加载它们(这种方法尝试次数最少)

<小时/>

我还尝试通过添加以下内容来保存检查点:

model_checkpoint = tf.keras.callbacks.ModelCheckpoint(filepath, monitor = "val_table_mask_loss", verbose = 1, save_weights_only=True)

作为 fit 方法中的回调 (callbacks=[model_checkpoint])但在第一个纪元结束时,它将生成以下错误(我显示了回溯的结束):

h5py/_objects.pyx in h5py._objects.with_phil.wrapper()
h5py/_objects.pyx in h5py._objects.with_phil.wrapper()
h5py/h5f.pyx in h5py.h5f.create()
OSError: Unable to create file (file signature not found)
<小时/>

当我在不是 Databricks 的平台上使用第二种方法时它工作正常,但是当我尝试加载模型时,我收到类似于第一种加载方法的错误。

<小时/>

更新 1

我尝试保存的变量filepath是一个dbfs引用,并且我的dbfs映射到datalake存储

<小时/>

更新2

按照评论中的建议进行尝试时,使用以下 answer我收到以下错误:

----> 3 model2 = keras.models.load_model("/tmp/model-full2.h5")
...
ValueError: Unknown layer: table_mask. Please ensure this object is passed to the `custom_objects` argument. See https://www.tensorflow.org/guide/keras/save_and_serialize#registering_the_custom_object for details.

更新 3:

所以我尝试按照错误加上这个 answer :

model2 = keras.models.load_model("/tmp/model-full2.h5", custom_objects={'table_mask': table_mask})

但是我收到以下错误:

TypeError: 'KerasTensor' object is not callable

最佳答案

尝试对您的自定义对象进行以下更改,以便可以正确序列化和反序列化它们:

将关键字参数添加到构造函数中:

def __init__(self, **kwargs):
super(TableMask, self).__init__(**kwargs)

table_mask重命名为TableMask以避免命名冲突。因此,当您加载模型时,它将看起来像这样:

model = keras.models.load_model("/tmp/path", custom_objects={'TableMask': TableMask, 'CustomObj2': CustomObj2, 'CustomMetric': CustomMetric})

问题作者的更新:

我们在我的代码中发现了一些错误:

  • 我有 2 个与变量同名的自定义图层(初学者错误)
  • 我需要按照建议的答案将自定义对象添加到 custom_objects 关键字中的加载方法
  • 我还需要按照答案建议更改 __init__ 函数
  • 我有一个自定义评分类,我还需要将其添加到 custom_objects

我还使用了以下answer @AloneTogether 在评论中建议(这个答案是我选择保存和加载模型的方式,加上我们在上面列表中编写的额外数据)

毕竟,保存、加载、预测效果很好

关于python - 保存自定义 TableNet 模型(基于 VGG19)以进行表提取 - Azure Databricks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75057274/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com