无法保存 Keras 模型,这是一个错误吗?

Cannot save a Keras model, is this a bug?

我正在尝试对 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 层的代码:

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。我希望它不会对我的网络训练产生不利影响。

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

resnet.save("mymodel.h5")