使用Keras中的Batch Normalization来实现双向LSTM

10

我想知道如何在Keras中使用批量归一化(BN)来实现双向LSTM。我知道BN层应该位于线性层和非线性层即激活层之间。这对于CNN或Dense层很容易实现,但是如何在双向LSTM中实现呢?

提前感谢。

1个回答

12

如果你想在LSTM的线性输出上应用BatchNormalization,你可以这样做:

from keras.models import Sequential
from keras.layers.recurrent import LSTM
from keras.layers.wrappers import Bidirectional
from keras.layers.normalization import BatchNormalization

model = Sequential()
model.add(Bidirectional(LSTM(128, activation=None), input_shape=(256,10)))
model.add(BatchNormalization())

基本上,您正在删除LSTM的非线性激活(但不是门激活),然后将BatchNormalization应用于输出。

如果您想将BatchNormalization应用于LSTM内部流之一(例如循环流),那么恐怕Keras中尚未实现此功能。


然后,您需要在之后添加非线性。您会怎么做呢?您可以添加一个简单的非线性层,但它是否会包含在循环结构中呢? - Pavel Komarov
你可以在双向层和批量归一化层之间添加一个激活层。但是这肯定不会包含在循环结构中,它只会应用于BiLSTM层的输出。 - albarji

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接