gpt4 book ai didi

keras - pytorch 的交叉熵损失与 keras 的 "categorical_crossentropy"不同吗?

转载 作者:行者123 更新时间:2023-12-04 00:01:07 27 4
gpt4 key购买 nike

我正在尝试在 keras 中模拟 pytorch 神经网络。

我确信我的 keras 版本的神经网络与 pytorch 中的非常接近,但在训练期间,我看到 pytorch 网络的损失值远低于 keras 网络的损失值。我想知道这是不是因为我没有正确复制keras中的pytorch网络或者两个框架中的损失计算不同。

Pytorch 损失定义:

loss_function = nn.CrossEntropyLoss()
optimizer = optim.SGD(net.parameters(), lr=args.lr, momentum=0.9, weight_decay=5e-4)

Keras 损失定义:
sgd = optimizers.SGD(lr=.1, momentum=0.9, nesterov=True)
resnet.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['categorical_accuracy'])

请注意,keras 网络中的所有层都已使用 L2 正则化 kernel_regularizer=regularizers.l2(5e-4) 实现了,我也用过 he_uniform根据 source code,我认为初始化是 pytorch 中的默认设置.

两个网络的批大小相同: 128 .

在 pytorch 版本中,我得到了大约 4.1209 的损失值减少到 0.5 左右.在 keras 中,它从 30 开始,然后下降到 2.5 .

最佳答案

PyTorch CrossEntropyLoss接受每个类别的非标准化分数,即不是概率( source )。 Keras categorical_crossentropy默认使用 from_logits=False这意味着它假定 y_pred包含概率(不是原始分数)( source )。
在 PyTorch 中,如果您使用 CrossEntropyLoss ,你不应该在最后使用 softmax/sigmoid 层。在 keras 中,您可以使用或不使用它,但设置 from_logits因此。

关于keras - pytorch 的交叉熵损失与 keras 的 "categorical_crossentropy"不同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61437961/

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