我想按照 Gal 的建议为 lstm 层实现 mc-dropout使用循环辍学。这需要在测试时使用 dropout,在常规 dropout(屏蔽输出激活)中,我使用具有以下层的功能 API:
intermediate = Dropout(dropout_prob)(inputs, Training=True)
但我不确定如何使用它来代替经常性 dropout LSTM 的。如果有人能帮助我解决这个问题,我会很高兴。
最佳答案
您可以以相同的方式将 MC dropout 与 recurrent_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 层一样被激活
关于tensorflow - 带有lstm的蒙特卡罗经常性辍学,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62282580/