【问题标题】:Can Keras / TensorFlow automatic model download be avoided cleanly?能否彻底避免 Keras / TensorFlow 自动模型下载?
【发布时间】:2022-01-04 15:31:35
【问题描述】:

Keras / TensorFlow 会在像这样实例化时自动下载模型的权重:

from tensorflow.keras import applications
model = applications.DenseNet121()

但出于生产目的,我需要避免这种行为。如何干净地检查该模型是否已下载,以便我可以引发异常而不是让它自动下载?我当然可以手动检查文件~/.keras/models/{model_identifier}_weights_tf_dim_ordering_tf_kernels.h5 的存在。但我想避免这种肮脏的解决方案。

【问题讨论】:

    标签: python tensorflow keras model


    【解决方案1】:

    基本上,您不需要检查模型的权重是否已经存在于您的系统中,因为 Keras 会为您完成这项工作。您可以从以下链接查看源代码:https://github.com/keras-team/keras/blob/master/keras/utils/data_utils.py

    证明这一点很容易;

    让我们自己创建权重文件并尝试调用applications.DenseNet121()

    !touch ~/.keras/models/densenet121_weights_tf_dim_ordering_tf_kernels.h5
    

    from tensorflow.keras import applications
    model = applications.DenseNet121()
    

    输出

    A local file was found, but it seems to be incomplete or outdated because the auto file hash does not match the original value of 9d60b8095a5708f2dcce2bca79d332c7 so we will re-download the data.
    Downloading data from https://storage.googleapis.com/tensorflow/keras-applications/densenet/densenet121_weights_tf_dim_ordering_tf_kernels.h5
    

    编辑

    import os
    from tensorflow.keras.applications import DenseNet121
    
    if ('densenet121_weights_tf_dim_ordering_tf_kernels.h5' in os.listdir('/root/.keras/models/')):
      model = DenseNet121(weights = '/root/.keras/models/densenet121_weights_tf_dim_ordering_tf_kernels.h5')
    else:
      # Throw your exception
    

    【讨论】:

    • 好的,但我说的是没有模型文件的情况。然后它会自动下载它。我不想发生这种情况。我希望它只抛出异常/使用 API 调用来检查文件是否存在。如果没有,我会自己抛出异常。无论如何,我想避免自动下载。
    • 你能帮我更好地理解,显然我无法跟进。如果权重不存在并且您不想下载,您想抛出异常。你想用它来实现什么令人困惑,假设它不存在并且你抛出了一个异常并且没有下载,然后呢?用你自己的体重,检查其他地方?我无法想象一个用例。编辑部分中的代码会解决您的问题吗?
    • 环境是不允许下载文件的环境。因此,我将退出该程序。这是一个故障保险。权重应该在构建管道的前一步中下载并复制到运行 keras 模型的容器中。但万一这以某种方式失败,我需要避免自动下载。
    • 编辑部分中的代码是我在问题中提到的肮脏的解决方法。我更喜欢干净的基于 API 的解决方案。因此,我的问题是,是否有如此干净的基于 API 的解决方案。
    • 不幸的是,据我所知,没有干净的 API 解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    • 2019-04-12
    • 2021-12-21
    • 1970-01-01
    相关资源
    最近更新 更多