编辑:我有部分答案,请参见本文结尾
在制作了两个不同的模型来预测策划者的得分之后,我现在尝试制作一个具有两个输出的模型:
该条目同时包含玩家的提议和在二进制表中找到编码的秘密。 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
和rcwp_out
的Sigmoid激活函数返回0到1之间的浮点数,因此它将永远不是自然数。在这种情况下,我需要更改激活函数和丢失函数或对标签数据进行二值化处理。
答案 0 :(得分:0)
我已经使用这些功能对标签数据进行了二值化处理。
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]]
现在可以正常工作了。