【问题标题】:Cannot save a Keras model, is this a bug?无法保存 Keras 模型,这是一个错误吗?
【发布时间】:2021-02-17 06:53:31
【问题描述】:

我正在尝试简单保存 resnet50 模型,但出现错误。我重现错误的代码:

from tensorflow import keras
import keras_resnet

inputs = keras.layers.Input(shape=(None, None, 3))
resnet = keras_resnet.models.ResNet50(inputs, include_top=False, freeze_bn=True)

resnet.save("my-model")

我收到错误:“KeyError: 'inputs'”。这是一个错误还是我在使用 keras save 命令时遗漏了什么?我在 MacOS 和我的 ubuntu 容器中尝试了该命令。结果一样。

编辑:它与 resnet 的官方 keras 实现一起使用。有了这个实现,虽然我必须更改 keras-retinanet 的 fizyr 实现的 resnet.py 文件中的代码。具体来说,定义了 resnet:

from keras.applications.resnet import ResNet50,ResNet101,ResNet152
resnet = ResNet50(input_tensor=inputs, include_top=False)

我必须更改主干层的代码:

backbone_layers = {
    'C2': resnet.outputs[0],
    'C3': resnet.outputs[1],
    'C4': resnet.outputs[2],
    'C5': resnet.outputs[3]
}

到:

backbone_layers = {
    'C2': resnet.layers[-137].output,
    'C3': resnet.layers[-95].output,
    'C4': resnet.layers[-33].output,
    'C5': resnet.outputs[0]
}

我还没有测试它,但我认为它应该可以工作。

我看到的唯一警告是我不再有 freeze_bn 参数。有关此参数的原因,请参阅https://github.com/fizyr/keras-retinanet/issues/974。我希望它不会对我的网络训练产生不利影响。

【问题讨论】:

    标签: keras save resnet


    【解决方案1】:

    您需要使用格式保存模型,例如h5。 我重现了您的错误,并修复了它:

    resnet.save("mymodel.h5")

    【讨论】:

    • 还可能会审查安装,如下所述:github.com/fizyr/keras-retinanet/issues/530
    • 但是我不要h5格式,我需要SavedModel格式
    • 当您使用 keras_resnet 实例化模型时,您应该使用“旧”的 keras 保存格式。如果您想使用 Tensorflow SaveModel 格式,请从那里实例化您的模型 - tensorflow.org/api_docs/python/tf/keras/applications/ResNet50
    • 至少我是这样解释这个错误的,而不用在 keras_resnet 文档中看得太深
    • 这就是我正在测试的,它正在与 TF 实现一起工作。当我正在使用 fizyr 的 keras-retinanet 实现时,我还必须更改一些代码,特别是在 resnet.py 文件中。我将编辑我的帖子以反映更改。
    猜你喜欢
    • 1970-01-01
    • 2019-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-02
    • 1970-01-01
    • 2019-08-25
    • 1970-01-01
    相关资源
    最近更新 更多