可以得到2个答案的激活函数是什么?

问题描述

我有一个算法可以读取一个 4X4 网格,其中一个单元格具有形状。 我正在尝试开发一种 CNN 算法,它可以知道形状是什么以及它在哪里。 以下是可能的输出

[0,1,0]
[0,0]

其中前四个值将显示对象是什么(三角形、圆形、星形、正方形),后十六个值将显示对象在 4x4 正方形中的位置,因此第一个值将是 (1,1)第二个 (1,2) 等

我很难找到能够显示上述内容的激活函数。我知道 softmax 不起作用,因为它被限制为所有值的总和为 1。我想我想要的是获得一个softmax 一样工作的激活函数,其中所有值的总和将变为 2,或者我想得到一些使用 2 softmax 激活函数的东西。我想知道是否有人知道我需要使用什么激活函数

解决方法

将您的矩阵分成两个输出:一个用于类别,另一个用于位置。

前四个参数使用交叉熵损失。这是因为您的形状只能是四类(三角形、圆形、星形、方形)之一。 LogSoftmax 或 Softmax 激活函数是合适的。

关于剩下的参数,我不是很了解你需要什么特性,所以很难推荐。您想预测形状位于哪个可能位置,并且对于给定输入只能位于其中一个位置,这是否正确?如果是这样,请在第二个输出上使用相同的损失和激活函数。

在反向传播之前将两个损失相加。


参考

https://discuss.pytorch.org/t/a-model-with-multiple-outputs/10440/2