gpt4 book ai didi

tensorflow - Keras 多个二进制输出

转载 作者:行者123 更新时间:2023-12-02 00:22:45 25 4
gpt4 key购买 nike

有人可以帮助我更好地理解这个问题吗?我必须训练一个神经网络,它应该输出 200 个相互独立的类别,每个类别都是一个从 0 到 1 的百分比。在我看来,这就像一个 binary_crossentropy 问题,但是我在互联网使用带有单个输出的binary_crossentropy。由于我的输出应该是 200,如果我应用 binary_crossentropy,这是正确的吗?

这就是我的想法,这是正确的方法还是应该改变它?

inputs = Input(shape=(input_shape,))
hidden = Dense(2048, activation='relu')(inputs)
hidden = Dense(2048, activation='relu')(hidden)
output = Dense(200, name='output_cat', activation='sigmoid')(hidden)
model = Model(inputs=inputs, outputs=[output])
loss_map = {'output_cat': 'binary_crossentropy'}
model.compile(loss=loss_map, optimizer="sgd", metrics=['mae', 'accuracy'])

最佳答案

要使用 Keras 优化多个独立的二元分类问题(而不是可以使用 categorical_crossentropy 的多类别问题),您可以执行以下操作(这里我以 2 个独立的二元输出为例,但您可以将其扩展为尽可能多)根据需要):

    inputs = Input(shape=(input_shape,))
hidden = Dense(2048, activation='relu')(inputs)
hidden = Dense(2048, activation='relu')(hidden)
output = Dense(units = 2, activation='sigmoid')(hidden )

这里使用 Keras 的 Lambda 层分割输出:

    output_1 = Lambda(lambda x: x[...,:1])(output)
output_2 = Lambda(lambda x: x[...,1:])(output)

adad = optimizers.Adadelta()

您的模型输出成为不同独立输出的列表

    model = Model(inputs, [output_1, output_2])

您在列表中为每个输出使用一个损失函数来编译模型。 (事实上​​,如果你只给出一种损失函数,我相信它会独立地将它应用于所有输出)

    model.compile(optimizer=adad, loss=['binary_crossentropy','binary_crossentropy'])

关于tensorflow - Keras 多个二进制输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46982222/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com