我有一个Keras模型,它输入一个简单的数组并输出两个值(x和y),这两个值属于5个可能的类别(编码为一热),具有自定义损失函数.我知道您必须 for each 期望的输出值设置损失函数,正如我在脚本中所做的那样.

我对模型进行了如下初始化:

inputs = keras.Input(shape=(14))
middle = layers.Dense(10,activation="relu")(inputs)
out_x = layers.Dense(5,activation="sigmoid")(middle)
out_y = layers.Dense(5,activation="sigmoid")(middle)
model = keras.Model(inputs=inputs,outputs={"x":out_x,"y":out_y})

model.compile(optimizer="adam",loss={"x":custom_loss,"y":custom_loss},metrics=["accuracy"])

然后,我try 创建一组输入数据和标签.标签的布局如下:

[
    {"x":[0,0,1,0,0],"y":[1,0,0,0,0]},
    ...
]

但当我试着用model.fit(training_data,labels)的时候,它给了我一个错误,那就是数字5和Make sure all arrays contain the same number of samples.重复了几百次

如果我希望我的模型有多个输出,我的标签应该是什么样子的?

推荐答案

  • 在您的code中,您需要提供dict格式的标签,其中每个output与其对应的label相关联.因此您有两个输出("x"和"y"),标签的 struct 应该如下所示:
labels = {
    "x": [
        [0, 0, 1, 0, 0],
        ...
    ],
    "y": [
        [1, 0, 0, 0, 0],
        ...
    ]
}
  • 每个output标签在dict内表示为单独的list.但是,每个列表中的length个应该与您的培训数据中的number of samples个匹配.
  • 要使用提供的标签train您的模型,您可以使用model.fit()
model.fit(training_data, labels, ...)
  • 还要确保你的custom loss functioncompatible,而你output的数据是shape.

Python相关问答推荐

无法导入已安装的模块

使用Beautiful Soup获取第二个srcset属性

Pydantic:如何将对象列表表示为dict(将列表序列化为dict)

如何在Python中使用io.BytesIO写入现有缓冲区?

Python:在类对象内的字典中更改所有键的索引,而不是仅更改一个键

'discord.ext. commanders.cog没有属性监听器'

ModuleNotFound错误:没有名为flags.State的模块; flags不是包

查找两极rame中组之间的所有差异

为什么sys.exit()不能与subproccess.run()或subprocess.call()一起使用

Python解析整数格式说明符的规则?

如何根据一列的值有条件地 Select 前N个组,然后按两列分组?

用砂箱开发Web统计分析

Pandas GroupBy可以分成两个盒子吗?

在嵌套span下的span中擦除信息

如何在PySide/Qt QColumbnView中删除列

Flask运行时无法在Python中打印到控制台

如何在Python请求中组合多个适配器?

如何根据rame中的列值分别分组值

Autocad使用pyautocad/comtypes将对象从一个图形复制到另一个图形

如何使用大量常量优化代码?