年龄分类的损失函数

数据挖掘 机器学习 Python 分类 损失函数 火炬
2022-03-01 15:22:48

我正在建立一个用于年龄分类的 CNN 模型。假设一个人的年龄在 1-100 之间,我的最后一个线性层包含 100 个输出神经元。

现在我想为这个分类问题找到一个合适的损失函数。

我不想使用回归

我的观察:

  • 我不能使用MSE 或 BCE损失,因为它们仅在元素方面起作用,因此不适合,就好像实际年龄为 25 岁那样,预测的 26 岁和 50 岁将有相同的损失。(预测将是 100 个元素向量,因为最后一层有 100 个神经元。)
  • 我发现了Hinge Loss 和 Cosine Proximity Loss但我不认为它们可以用于这种类型的分类,因为它们只发现两个向量之间的相似性,而不给附近的实际预测对赋予任何重要性或权重(例如实际年龄 25 和预测年龄 26 应该有一个非常低的损失)

谁能为这个分类问题建议我一个合适的损失函数(最好在 Pytorch 中)?

编辑

假设我想要一个损失函数 (L(predicted, actual)) 使得(假设为 5 类分类)

let actual = [0,0,1,0,0]

L([0,0,1,0,0], actual) < L([0,1,0,0,0], actual) < L([1,0,0,0,0], actual)
L([0,0,1,0,0], actual) < L([0,0,0,1,0], actual) < L([0,0,0,0,1], actual) 
1个回答

如果您的网络输出一个向量 x{0,1}NN=100i=1Nxi=1,你可以考虑权重W=(wi)RNwi:=i为了i{1,,100}.

然后,对于预测向量x和真实向量y,你可以使用损失函数L(x,y):=||WTxWTy||=||WT(xy)||