Keras 中具有批量标准化的双向 LSTM
Posted
技术标签:
【中文标题】Keras 中具有批量标准化的双向 LSTM【英文标题】:Bidirectional LSTM with Batch Normalization in Keras 【发布时间】:2017-11-24 23:55:51 【问题描述】:我想知道如何在 Keras 中使用批标准化 (BN) 实现 biLSTM。我知道BN层应该介于线性和非线性之间,即激活。这很容易通过 CNN 或 Dense 层实现。但是,如何使用 biLSTM 做到这一点?
提前致谢。
【问题讨论】:
【参考方案1】:如果你想对 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 中实现。
【讨论】:
不过,您随后需要将非线性添加回来。你会怎么做?你可以只添加一个普通的非线性层,但它会包含在循环结构中吗? 您可以在 Bidirectional 和 BatchNormalization 层之间添加一个 Activation 层。但这肯定不会包含在循环结构中,它只会应用于 BiLSTM 层的输出。以上是关于Keras 中具有批量标准化的双向 LSTM的主要内容,如果未能解决你的问题,请参考以下文章