使用 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层一样被激活
我想按照 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层一样被激活