【问题标题】:Can Keras' model.predict return a dictionary?Keras 的 model.predict 可以返回字典吗?
【发布时间】:2019-12-08 05:10:30
【问题描述】:

文档https://keras.io/models/model/#predictmodel.predict 返回预测的 Numpy 数组。 在 Keras API 中,有没有办法区分这些数组中的哪一个? 在 TF 实现中呢?

在同一页文档的顶部,他们说“模型可以使用列表指定多个输入和输出”。相反,如果一个人通过字典,似乎什么都不会中断:

my_model = tf.keras.models.Model(inputs=my_inputs_dict, outputs=my_outputs_dict)

当调用 model.fit 时,相同的文档说“如果模型中的输入层被命名,您还可以传递一个字典,将输入名称映射到 Numpy 数组。”

如果my_output_dict 中的键或my_output_dict 中的字典值(层)的名称附加到my_model.predict(...) 的输出中,那就太好了

如果我将模型保存为 TensorFlow 的 saved_model 格式 protobuf,使用 tf.keras.model.save tf.serving API 以这种方式工作——使用命名的输入和输出......

【问题讨论】:

  • 我怀疑答案可能只是“使用列表,而不是模型定义中的字典,并且输出的顺序与模型定义中的顺序相同。”如果是这种情况,我认为传递输入和输出的字典应该引发异常,除非隐含依赖此stackoverflow.com/questions/39980323/…
  • 当我尝试将字典传递给 outputs 参数时,我得到以下异常:ValueError: Output tensors to a Model must be the output of a Keras 'Layer'。我同意,如果此选项未记录在案,则应引发异常,否则输出将具有任意顺序。
  • @rvinas 您使用的是哪个 keras 版本?我已经尝试过 2.0.0-beta1 和 1.14 的 tf.keras 都没有抛出异常。
  • 我使用的是 keras 2.2.4
  • Tensorflow.keras 有一个 dict 的示例作为 model.fit() 的输入和输出:tensorflow.org/guide/keras/…。可悲的是,model.predict() 没什么。我也更喜欢它。

标签: python tensorflow keras


【解决方案1】:

使用my_model.output_names

给定

my_model = tf.keras.models.Model(inputs=my_inputs_dict, outputs=my_outputs_dict)

您自己从my_model.output_names 创建dict,它是按预测顺序排列的输出层的name 属性列表

prediction_list = my_model.predict(my_test_input_dict)
prediction_dict = {name: pred for name, pred in zip(my_model.output_names, prediction_list)}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-15
    • 2018-09-04
    • 1970-01-01
    • 2019-09-12
    • 1970-01-01
    • 2022-07-20
    • 2018-02-05
    • 1970-01-01
    相关资源
    最近更新 更多