使用 lstm 的蒙特卡洛经常性辍学

monte-carlo recurrent dropout with lstm

我想按照 Gal 的建议使用循环 dropout 为 lstm 层实现 mc-dropout。这需要在测试时使用 dropout,在常规 dropout(屏蔽输出激活)中,我将功能 API 与以下层一起使用: intermediate = Dropout(dropout_prob)(inputs, training=True) 但我不确定如何使用它来代替 LSTM 的 recurrent dropout。如果有人能帮我解决这个问题,我会很高兴。

你可以用同样的方法在 recurrent_dropout 中使用 MC dropout。您只需要在函数 API

中指定 training=True
inp = Input(shape=(10, 1))
x = LSTM(1, recurrent_dropout=0.3)(inp, training=False)
m = Model(inp,x)

X = np.random.uniform(0,1, (1,10,1))

output = []
for i in range(0,100):
    output.append(m.predict(X))

training=False输出的结果总是一样的,这意味着MC dropout不适用

inp = Input(shape=(10, 1))
x = LSTM(1, recurrent_dropout=0.3)(inp, training=True)
m = Model(inp,x)

X = np.random.uniform(0,1, (1,10,1))

output = []
for i in range(0,100):
    output.append(m.predict(X))

在第二个例子中,我们设置training=True,我们可以看到输出元素总是不同的。

总之,recurrent_dropout可以像简单的dropout层一样被激活