python - Keras 多输出模型
问题描述
编辑:我有部分答案,请看这篇文章的结尾
在制作了两个不同的模型来预测策划者的得分之后,我现在尝试制作一个具有两个输出的模型:
- rcrp :在正确位置具有正确颜色的钉的数量
- rcwp :在错误位置具有正确颜色的钉子的数量。
该条目包含玩家的提议和在二进制表中编码的秘密。6 种颜色 * 4 个引脚 = 24 位用于秘密和 24 位用于提案。
这是我的模型架构。
这是我的主要代码:
main_input = Input(shape=(input_layer_size, ), name='main_input')
x = Dense(hidden_layer_size, activation="relu")(main_input)
for i in range(nb_hidden_layer):
x = Dense(hidden_layer_size, activation="relu")(x)
rcrp_out = Dense(1, activation='sigmoid', name='rcrp_out')(x)
rcwp_out = Dense(1, activation='sigmoid', name='rcwp_out')(x)
model_rpwp = Model(inputs=main_input, outputs=[rcrp_out, rcwp_out])
model_rpwp.compile(optimizer='rmsprop', loss=['binary_crossentropy', 'binary_crossentropy'], metrics=['accuracy'])
以下是训练数据的示例:
print(rpwp_feature)
[[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 1]
[0 0 0 ... 0 1 0]
...
[1 0 0 ... 0 0 0]
[1 0 0 ... 0 0 1]
[1 0 0 ... 0 0 0]]
print(rcrp_label)
[3 0 1 ... 0 1 4]
print(rcwp_label)
[0 3 2 ... 4 2 0]
可能有一些我不明白的地方,因为我的模型没有学到任何东西,并且总是预测两个输出都为 0。
我尝试了多种损失函数和架构,但没有任何效果。我的输入和输出数据按我的预期形成。
你能帮我理解我做错了什么吗?
编辑:
我有部分答案。rcrp_out
和的 Sigmoid 激活函数rcwp_out
返回一个介于 0 和 1 之间的浮点数,因此它永远不会是自然数。在这种情况下,我需要更改激活函数和损失函数或二值化我的标签数据。
解决方案
我已经用这些函数对我的标签数据进行了二值化。
def binarise_number(number, max_number=None):
if max_number is None:
return [int(x) for x in format(number, "0b")]
n_number = format(number, "0>%db" % len(binarise_number(max_number, None)))
return [int(x) for x in n_number]
def revert_binarise_number(n_number):
str_number = '0b' + ''.join(str(int(x)) for x in n_number)
number = int(str_number, base=2)
return number
我的数据现在是这样的:
print(rcrp_label)
[[0 1 0]
[0 1 0]
[0 1 0]
...
[0 0 0]
[0 1 0]
[1 0 0]]
print(rcwp_label)
[[0 0 1]
[0 0 0]
[0 0 0]
...
[0 1 0]
[0 0 0]
[0 0 0]]
它现在按预期工作。
推荐阅读
- swift - stride(from: 0.0, to: 10.0, by: 2.0) 使用 Float 类型而不是 Double?
- java - Java:使用非标准比较器对 int[] 进行 Arrays.parallelSort
- java - 为什么 javax.websocket 不能解决?
- javascript - 测试运行卡在进度 CodeceptJS + Puppeteer
- laravel - 不想在每次计算时都写查询,我该如何使用变量?
- python - 在 csv 文件中追加数据问题
- visual-studio-code - VSCode 扩展位置变量
- kubernetes - 如何在 GKE 中刷新 kubernetes 配置访问令牌
- angular - angular 6材料设计反应形式重用输入组件
- html - 在 div 块中居中 img (slick-slider)