【问题标题】:Model is predicting only zeroes with one 1 after using softmax activation使用 softmax 激活后,模型只预测零和一个 1
【发布时间】:2022-01-08 09:23:36
【问题描述】:

我正在使用 Tensorflow 1.15 和 Keras 2.3.1 我的 Keras 模型有这样的代码:

model = keras.Sequential()
model.add(L.InputLayer(batch_input_shape= (None, 768)))
model.add(L.Dense(input_shape = (None,768), activation='relu', units = 256))
model.add(Dropout(0.25))
model.add(L.Dense(input_shape = (None,256), activation='relu', units = 128))
model.add(Dropout(0.25))
model.add(L.Dense(input_shape=(None,128), activation='softmax', units = len(tensor_val_cat[0])))

model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy', precision, recall, f1])

正在为每个样本预测这一点,而我在最后一个 Dense 层中使用 softmax 激活:

array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], dtype=float32)

但是当我将最后一次激活从 softmax 更改为 reLU 时,它会变得更好:

array([ 22.15598  ,  11.37785  ,   4.0738773,  82.95521  ,   0.       ,
         0.       ,   0.       ,  18.631542 ,   0.       ,   5.5782046,
         0.       ,   4.9239693,   0.       ,  16.169178 ,   0.       ,
         6.9248867,   8.373851 ,   8.884083 ,   9.291541 ,   0.       ,
         0.       ,   7.2818174,   0.       ,   0.       ,   6.06402  ,
        12.253789 ,   5.980045 ,   6.226884 ,   8.512158 ,   7.8921595,
        13.949636 ,   7.111844 ,   0.       ,  30.935558 ,   0.       ,
        18.647184 ,   0.       ,   8.561647 ,   0.       ,  10.515696 ,
        10.424169 ,   9.935862 ,   9.651736 ,   0.       ,   0.       ,
         8.253851 ,  26.623386 ,  21.973936 ,  17.13469  ,   0.       ,
        18.480967 ,   0.       ,   4.4326754,   9.894943 ,   0.       ,
        20.798775 ,   3.174389 ,   6.4419975,  19.948698 ,   5.1431727,
         7.7155123,  20.939203 ,   0.       ,  17.534533 ,   5.989612 ,
        10.36599  ,   8.2254505,   0.       ,  13.186766 ,  11.333556 ,
        14.58358  ,  12.923845 ,   0.       ,   3.8745575,   6.7094135,
        24.11962  ,   0.       ,   9.189409 ,   0.       ,   0.       ,
         0.       ,   6.585493 ,  24.013597 ,  14.495815 ,   0.       ,
         6.1411734,  49.32834  ,  25.741114 ,  11.39783  ,  12.999501 ,
        16.318121 ,   0.       ,  15.020708 ,   0.       ,  11.767337 ,
       260.82144  ,  28.074688 ,   5.5710874,   8.066694 ,  11.450023 ,
         0.       ,   7.5654263,  17.537619 ,   0.       ,  18.570484 ,
         3.9268994,   9.846983 ,  54.34089  ,   6.3504252,   0.       ,
        12.469551 ,  11.262119 ,  81.61232  ,   0.       ,   8.149481 ,
         0.       ,  10.952655 ,  18.77889  ,  45.96867  ,  25.36038  ,
         0.       ,   0.       ,   0.       ,  10.455843 ,   0.       ,
        39.179607 ,   0.       ,   6.2759237,  18.627535 ,   0.       ,
         3.2353485,   0.       ,   0.       ,  15.829307 ,  11.45084  ,
         6.2554755,  90.0754   ,  15.144176 ,   0.       ,  15.053744 ,
         0.       ,   7.800592 ,  11.731603 ,   0.       ,   0.       ,
         0.       ,   8.28636  ,   0.       ,   0.       ,   0.       ,
        53.148182 ,   0.       ,   5.1440187,   0.       ,  63.715683 ,
        32.42369  ,   0.       ,  18.376951 ,  13.3018875,   0.       ,
         0.       ,   0.       ,   3.497302 ,   3.9504528,   7.3174777,
         0.       ,   6.7174683,  11.641777 ,   5.5688257,   0.       ,
         0.       ,  11.408187 ,   9.692002 ,  19.378729 ,   0.       ,
        11.024126 ,  11.887186 ,   5.125866 ,   0.       ,   0.       ,
        15.08582  ,   0.       ,  33.485287 ,  23.441591 ,  10.062655 ,
         0.       ,   8.631276 ,   0.       ,  13.220199 ,   0.       ,
         5.132385 ,   0.       ,   0.       ,  10.135473 ,  13.213521 ,
         0.       ,  12.063043 ,  12.336954 ,   7.578767 ,   0.       ,
         4.895108 ,  27.40385  ,   6.0983057,   2.5386598,  24.318102 ,
        14.043896 ,   0.       ,  10.418289 ,   5.761671 ,  17.748152 ,
         5.8953934,   0.       ,   0.       ,   0.       ,   9.80458  ,
         0.       ,  20.902594 ,  31.065573 ,  13.040765 ,   8.419372 ,
         0.       ,  11.227969 ,   0.       ,   5.400335 ,   0.       ,
         0.       ,   5.159615 ,  11.675414 ,   0.       ,   0.       ,
         8.022585 ,  12.005584 ,   4.038471 ,   6.218788 ,  10.806794 ,
        15.874523 ,  11.118925 ,   0.       ,   7.7477336,   0.       ,
         0.       ,   7.1560225,   0.       ,   8.95097  ,   0.       ,
        12.333616 ,  11.627193 ,   5.4876437,  25.533556 ,   5.655847 ,
         0.       ,  14.226913 ,   5.2383256,   0.       ,   5.673967 ,
         0.       ,   5.9973536,   0.       ,  12.03303  ,   6.4873867,
         3.6789234,   4.8231483,   0.       ,  21.4692   ,   0.       ,
         0.       ,   0.       ,   0.       ,  12.463381 ,   0.       ,
         0.       ,   0.       ,  10.32079  ,  19.267895 ,   6.7940717,
         3.1542706,   0.       ,   0.       ,   0.       ,  10.24344  ,
        11.1568   ,   3.5449536,  22.421698 ,   0.       ,   0.       ,
         7.1022887,   9.147839 ,   0.       ,   0.       ,  14.933947 ,
         6.061274 ,   6.5337996,   5.5994735,   0.       ,   2.0698977,
        25.453054 ,   0.       ,   6.533775 ,   3.5728502,  13.730647 ],
      dtype=float32)

我也想使用 softmax 激活,请问您能帮我解决上述问题吗?

【问题讨论】:

  • 你不能简单地从 softmax 更改为 ReLU 而不将损失更改为 mae。 Softmax 用于多类分类,ReLU 用于回归问题。您在输出中使用 predict_classes 或 np.argmax 吗?
  • 为什么这是一个问题,因为它是一个有效的 softmax 输出?我没有看到任何问题。

标签: python tensorflow keras softmax


【解决方案1】:

softmax 将所有输入值压缩到[0, 1] 范围内,它们总和为1,这正是您所看到的。因此,您可以将它们视为概率。

另一方面,ReLU 将输入值映射到[0, +∞] 范围内,它们不需要总和为1

如您所见,softmaxReLU 的 argmax 相同(最大值分别为 1 和 260.82144。所以问题实际上不在于激活函数。


【讨论】:

    猜你喜欢
    • 2020-09-08
    • 1970-01-01
    • 1970-01-01
    • 2020-09-14
    • 1970-01-01
    • 2020-01-04
    • 1970-01-01
    • 2016-03-22
    • 2021-03-23
    相关资源
    最近更新 更多