【问题标题】:Should I use tf.keras.utils.normalize to normalize my targets?我应该使用 tf.keras.utils.normalize 来规范化我的目标吗?
【发布时间】:2020-08-25 21:04:02
【问题描述】:

处理预测分数的机器学习模型回归问题。

通常,当使用缩放器进行标准化时,例如MinMaxScaler,您会获得对缩放器的引用,以便稍后您可以将数据反转回其原始值。

当使用tf.keras.utils.normalize 时,(据我所知)是以下数据的 L2 规范化:

    val target
0   1   10
1   2   20
2   3   30
3   4   40
4   5   50

你得到这个输出:

    val     target
0   0.13484 0.13484
1   0.26968 0.26968
2   0.40452 0.40452
3   0.53936 0.53936
4   0.67420 0.67420

所以我认为没有办法回到10,20,30,40,50的原始系列

问:如果我想将预测目标反转回原来的尺度,我应该使用 MinMaxScalar 分别对分数进行归一化吗?

【问题讨论】:

  • 您需要标准化您的输入,而不是输出。所以,target 不应该被规范化
  • 有吗?但后来我不能使用,让我们在最后一层使用 sigmoid 函数。此外,我想将我所有的核心范围在 0 -1 之间。
  • sigmoid函数用于0或1的分类问题。但在回归问题中,你需要处理一个连续范围的数字。
  • 但是Sigmoid范围是0-1,如果分数范围是0-1,我不能在最后一层使用它吗?
  • 好的,这是我的看法。 sigmoid 是为全实值定义的,其中输出定义在 [0, 1] 上。它对于输出为01 的二进制分类非常有用。在回归中,这真的很伤人..为什么?因为sigmoid(10)=0.9999sigmoid(20)=0.9999sigmoid(30)=0.9999...这就是为什么

标签: python tensorflow keras normalization


【解决方案1】:

神经网络激活通常喜欢将它们的输入归一化。对网络中节点的输入进行规范化有助于防止所谓的梯度消失(和爆炸)。

通常,批量标准化是在输入上执行的,但它也有其自身的缺点,例如由于额外的计算导致预测速度较慢。相反,您可以使用您提到的任何其他规范化技术。

在您的示例中,不是规范化输入和目标,而是仅规范化输入,如下所述。

数据框:

val target
0   1   10
1   2   20
2   3   30
3   4   40
4   5   50

标准化输入:

df["val"] = tf.keras.utils.normalize(df["val"].values,axis=-1, order=2 )[0]

输入标准化数据框:

    val target
0   0.13484 10
1   0.26968 20
2   0.40452 30
3   0.53936 40
4   0.67420 50

【讨论】:

    猜你喜欢
    • 2011-08-26
    • 2016-11-12
    • 2011-07-17
    • 2015-02-08
    • 2020-05-08
    • 2011-02-11
    • 2010-12-09
    • 2016-06-09
    • 1970-01-01
    相关资源
    最近更新 更多