Softmax 激活预测总和不等于 1

数据挖掘 喀拉斯 张量流 rnn 软最大
2022-02-14 20:40:11

我是 rnns 的初学者,请考虑这个示例代码

from tensorflow import keras
import numpy as np

if __name__ == '__main__':
    model = keras.Sequential((
        keras.layers.SimpleRNN(5, activation="softmax", input_shape=(1, 3)),
    ))
    X = [
        [1, 2, 3],
        [4, 5, 6]
    ]
    y = [
        [1, 0, 0, 0, 0],
        [0, 1, 0, 0, 0]
    ]
    X = np.array(X)
    X = np.reshape(X, (2, 1, 3))
    y = np.array(y)
    # print(X)
    # print(y)
    print(model.summary())
    model.compile(optimizer=keras.optimizers.Adam(learning_rate=0.01),
                 loss="categorical_crossentropy")
    model.fit(X, y, epochs=100)
    p = model.predict(X)
    print(p)
    p = list(np.squeeze(p))
    print(p)
    print(np.sum(p,axis=1))

我正在使用一个简单的 rnn,批量大小 = 2、3 个输入特征和 1 个时间步长,因为激活是 softmax,最后一行打印 [1,1],因为 softmax 的预测总和为 1。但是当我更改层从 SimpleRNN 到

keras.layers.LSTM(5, activation="softmax", input_shape= 
                 (1,3),recurrent_activation="softmax")

预测的总和不再是 1,这是为什么呢?

1个回答

Softmax 不能作为 LSTM 激活。您必须在 LSTM 层之后使用 softmax 激活添加密集层。我会建议在 LSTM 中使用另一种激活,例如 relu。