【问题标题】:Cannot load model in keras from Model.get_config() when the model has Attention layer当模型具有注意力层时,无法从 Model.get_config() 在 keras 中加载模型
【发布时间】:2020-01-22 19:10:03
【问题描述】:

我正在从某个函数创建的配置字典中加载 keras 中的模型。我已经用许多其他模型尝试过这个方案而没有问题,但这是我使用tensorflow.keras.layers.Attention 的第一个方案,并且在从配置中读取时出现未知层异常。

我知道有一个 API 可以使用 JSON/YAML 序列化和加载自定义层,但这是一个 keras 层,我做错了吗?

顺便说一下,这是使用 Tensorflow 1.14.0

from tensorflow.keras import layers, models, utils

def my_model(max_len, vocab_size, embedding_dims):
    sequence = layers.Input(shape=(max_len,), name='sequence')
    feature = layers.Input(shape=(1,), name='another_feature')

    x = layers.Embedding(input_dim=vocab_size,
                         output_dim=embedding_dims,
                         input_length=max_len)(sequence)
    out, sh, sc = layers.LSTM(64, return_state=True)(x)
    att = layers.Attention()([out, sh])
    x = layers.concatenate([att, feature])
    model = models.Model(inputs=[sequence, feature], outputs=[x])
    model.summary()
    return model.get_config()

title_max_len = 50
vocab_size = 35000
embedding_dims = 30

config = my_model(
    title_max_len, 
    vocab_size, 
    embedding_dims
)
model = models.Model.from_config(config)  # Unknown layer: Attention
utils.plot_model(
    model, 
    show_shapes=True, 
    show_layer_names=True, 
    to_file='model.png'
)

【问题讨论】:

  • 我无法复制您的问题。代码不会按原样运行 - 我从 in 对象收到语法错误(in 是保留关键字),并且在对 my_model 的调用中有一个错字/额外参数。当我更正这些代码时,代码运行时没有任何 ValueError
  • @BrendanA。我编辑了代码 sn-p 并确保运行它时出错
  • 我意识到我之前测试时运行的是 1.15。刚刚确认 1.14 对我来说失败了,但 1.15 没有给出错误。
  • 确实 1.14 失败了,您能否发表评论作为答案以将其标记为已解决?
  • 刚刚发布。当然,这并不能真正解释您为什么会遇到问题 - tf.keras.layers.Attention 的文档适用于 1.14,其中包含与您的非常相似的示例。

标签: python tensorflow keras


【解决方案1】:

Tensorflow 1.14 似乎存在问题,但它在 1.15 中没有任何问题。如果您能够升级,那么这可能是最简单的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-20
    • 1970-01-01
    • 2016-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-05
    • 2021-11-30
    相关资源
    最近更新 更多