张量流:难以置信的巨大的稀疏范畴交叉熵

2024-04-24 15:31:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在Tensorflow(使用tf.keras)执行文本分类任务。以前,我只是使用文本功能,我的损失是sparse_categorical_crossentropy,培训看起来是这样的:

enter image description here

这完全在预料之中,损失约为7。在

现在,我添加了2个随机浮动特性,它们介于0和100000之间。我更新了我的tf.data.Dataset对象,因此它们现在看起来像:

dataset = tf.data.Dataset.from_tensor_slices(({"review": x_rev_train, "structured": x_structured_train}, labels_train))

并创建了一个新的Input对象,将其连接到我的图形。看起来很正常。在

我现在训练看到的是: enter image description here

所以我现在的损失大概是1000万(从100万美元开始)。我很困惑。鉴于范畴交叉熵是如何定义的,这显然是错误的。。。在

所以我开始调试,并使两个浮点特征的值为0.0。当我这样做的时候,失去的又回到了第一张照片。在

然后我将两个浮点特性都设置为100000.0的常量值,然后问题又出现了。所以我认为这与这两个浮动特性的大小有关。在

有没有想过我可能做错了什么?我知道我还没有缩放这两个浮动特性,但为什么我的损失会像那样爆炸呢?在

谢谢你的帮助!在

编辑:

似乎这种巨大的损失只发生在第一个时代?在随后的时代,它又回到了正常状态。有什么想法吗?在

enter image description here


Tags: 对象文本功能datatftensorflow分类train
1条回答
网友
1楼 · 发布于 2024-04-24 15:31:46

这正是您需要将模型中的数字特征标准化的原因。这在几乎所有具有不同取值范围的特征的ann中都是必要的。在第一步之后,权重可以做一个巨大的跳跃来尝试对这些大规模特征进行建模,你的损失将恢复正常,但在开始时权重是随机的,可能集中在零附近,这取决于你如何初始化它们。如果你在一开始就考虑这些小特征权重的输出预测,然后看到这些非标准化特征值的差异将达到数百万个数量级,这就是损失值爆炸的原因。在

教训是,如果不首先将这些特征标准化(减去平均值并除以标准差),就不应该将这些特征放入网络中。试着这样做,你会发现行为会恢复正常。在

相关问题 更多 >