获取星期几的激活函数

Activation function to get day of week

我正在编写一个程序来预测什么时候会发生。我不知道在星期几 (1-7) 中要输出哪个激活函数。

我试过 sigmoid 函数,但我需要输入预测的日期并输出它的概率,我不希望它是这样的。

我希望激活函数从 0 返回无穷大,ReLU 是这个任务的最佳激活函数吗?

编辑:

另外,如果我想要超过 7 天的输出怎么办?我正在寻找执行此操作的动态方法

您要做的是用回归方法解决分类问题。这至少是非常规的。

您可以使用任何您想要的激活函数并根据需要定义您的输出。例如。线性,relu,输出范围从 1 到 7 或 -1(或 0)和 1 之间的某个值,如 tanh 或 sigmoid,并映射输出(-1 -> 1;-0.3 -> 2;...)。

你的问题是你会得到一个浮点数。所以你的模型不仅要学习如何正确分类,还要学习如何预测输出神经元中你想要的(几乎)准确数字。这使得问题比它必须的更复杂。使用这样的模型,对于某些离群数据点,您也可能会得到意想不到的 return 值,例如 0、-1 或 8。那您会怎么做?

总结一下:听听@venkata krishnan,使用 softmax 和七个输出神经元,如果需要的话,将这个结果映射到神经网络外部 1 到 7 之间的数字。

编辑

再次阅读评论后,我想到的是你想要什么和你应该做什么。

您可以尝试将倒数第二层设为 7 神经元 softmax 层,并将这些输出映射到最后一层中的单个神经元。

我从来没有尝试过,也没有读过类似的东西,所以我不能告诉你这是否是个好主意,可能不是,但你可能认为它值得一试。

我想补充一下@venkata krishnan 的观点,它在你的问题设置中提出了一个有效的观点。您会在下面找到原始问题的答案,但我强烈建议您先阅读以下评论。

通常,您想要区分分类变量、序数变量和区间变量。我在中给出了比较长的解释,可能有助于更详细地理解这个概念。
在您的场景中,您主要想了解“多么错误”。当然,假设您正在做的事情并将其解释为区间变量是完全合理的,因此在不同值之间有一个假设的顺序(和距离)。
但是, 有问题的是,您假设 连续 space 在 离散 变量。例如,解释 4.3 的输出没有任何意义,因为您只能区分 4(星期五,假设您从 0 开始对日期进行编号)或 5(周六)。介于两者之间的任何值都必须四舍五入,这非常好 - 直到您想要对此损失执行反向传播。 这是有问题的,因为无论您 "round" 您的价值观如何,您本质上都是在引入一个非凸函数和非连续函数。同样,为了举例说明这一点,您可以假设四舍五入到最接近的数字;然后,在 4.5 的值处,您会看到损失突然增加,这是无差异的,因此会给您的优化器带来困难,可能会限制系统的收敛。

相反,如果您按照@venkata krishnan 的建议使用多个输出神经元,您可能会在纸上丢失距离信息(您休息了多少天),但您当然仍然可以将您的损失解释为任何你喜欢的方式。对于离散值变量,这肯定是更好的选择。

回答你原来的问题:我个人会确保你的损失函数在上层和下层都有界,否则你可以undefined/inconsistent损失值,这可能会导致低于标准的优化。一种方法是重新缩放 Sigmoid 函数(sigmoid(R) 的余域是 [0,1]。最终,您可以将输出乘以 6,得到[0,6] 的值范围,可以(四舍五入后)涵盖您想要的所有值。

据我所知,没有像激活函数这样的东西可以产生 0 到无穷大。您可以使用“Softmax”激活函数应用 7 个输出节点,这将 return 概率。还有另一种可能有效的解决方案。您可以使用“Binary”激活函数来输出 3 个节点,这将使 return 为 0 或 1。这意味着您可以有 8 个不同的输出,只有 3 个节点为 000, 001、010、011、100、101、110 和 111。您可以使用其中的 7 个。