我正在尝试设计一个进行自定义二元预测的神经网络。
通常进行二元预测时,我会使用softmax作为最后一层,然后我的损失可以是我的预测与真实二元值之间的差异。
然而,如果我不希望使用softmax层呢?相反,我输出一个实数,并检查这个数是否满足某个条件。在一个非常简单的案例中,我检查这个数是否为正。如果是正数,我预测1
,否则我预测0
。假设我希望所有数字都是正数,所以真实预测应该都是1,然后我想训练这个网络,使其输出所有正数。我对如何为这个问题制定损失函数感到困惑,这样我才能进行反向传播并训练网络。
有谁知道如何创建这种类型的网络吗?
回答:
我对如何为这个问题制定损失函数感到困惑,这样我才能进行反向传播并训练网络。
你应该这样处理这个问题。实际上,你需要将标签转换为正负目标值(例如+1
和-1
),然后解决回归问题。损失函数可以是简单的L1或L2损失。网络将尝试学习输出接近训练目标的预测,之后你可以解释它是更接近一个目标还是另一个,即正数或负数。你甚至可以进一步设置一些目标值更大(例如+2
或+10
),以强调这些例子非常重要。示例代码:TensorFlow中的线性回归。
然而,我必须提醒你,你的方法有严重的缺点,例如参见这个问题。训练数据中的一个异常值很容易使你的预测出现偏差。使用softmax + 交叉熵损失的分类更加稳定,这几乎总是更好的选择。