如何修复使用Theano进行交叉熵计算时的NAN或INF问题?

我们需要计算:

y*log(y_compute)+(1-y)*(1-y_compute)

所以当y_compute10时,这个问题就会出现。我应该怎样做来避免这个问题呢?


回答:

你的表达式y_compute可能包含指数运算,例如来自theano.tensor.nnet.sigmoid?在这种情况下,它通常不会达到精确的0或1。在这些情况下,你可以直接使用你的表达式或theano.tensor.nnet.crossentropy_categorical_1hot

如果由于某些原因你得到了精确的0和1,另一种方法是对交叉熵的输入进行裁剪。例如,尝试用theano.tensor.clip(y_compute, 0.001, 0.999)替换y_compute,这样可以限制对数的范围。

Related Posts

如何在Pytorch Lightning中使用NumPy数据集

我想使用NumPy创建一个数据集,然后训练和测试一个简…

如何从正类未标记学习中计算ROC AUC分数?

我正在尝试根据这个示例调整一些正类未标记学习的代码,我…

如何在推理时获取训练模型各层的特征图?

我已经根据这个网站实现并训练了模型,并使用了作者的源代…

Keras自定义损失函数 – 尽管返回与分类交叉熵相同形状,仍出现形状不匹配

我基于余弦创建了一个自定义损失函数: def cos_…

为什么分割模型库的预测输出(值)是(0到1)而不是(0或1)?

在按照这个教程进行语义分割任务时, 我注意到模型的最终…

SVM在测试子集上表现良好,但在整个数据集上失败

我使用sklearn对大块数据进行迭代训练SVM。每个…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注