【发布时间】:2020-01-21 16:24:11
【问题描述】:
目前我有一个模型可以达到大约 81% 的准确率。我正在处理的数据是连续的,所以我想尝试包含一个双向 LSTM 层,看看这是否可以提高性能。
我的数据是字母序列,例如ABCD。为了通过我的模型传递序列,我使用 one-hot 编码。所以ABCD 可能会变成:
[ [1, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0], [0, 0, 0, 1, 0, 0] ]
注意 - 序列实际上有 300 个字符长,但为了这个问题,我想让前面的示例保持简单。
所以目前我的模型看起来像这样:
model = keras.Sequential([
keras.layers.Flatten(input_shape=(300, 6)),
keras.layers.Dropout(0.5),
keras.layers.Dense(128, activation='tanh'),
keras.layers.Dropout(0.5),
keras.layers.Dense(64, activation='tanh'),
keras.layers.Dense(1, activation='sigmoid')
])
所以输入形状显示每个序列有 300 个字母长,有 6 个字母可供选择。这个模型有效。
现在我想调整我的模型以使用双向 LSTM 层,据我了解,这可能会为我提供更好的序列数据性能。但是,我很难理解如何调整这个模型来实现这一点。我尝试了各种不同的图层排列,但我遇到了与维度有关的错误。
我想要一些类似的东西:
model = keras.Sequential([
keras.layers.Flatten(input_shape=(300, 6)),
keras.layers.Bidirectional(LSTM(64)),
keras.layers.Dropout(0.5),
keras.layers.Dense(128, activation='tanh'),
keras.layers.Dropout(0.5),
keras.layers.Dense(64, activation='tanh'),
keras.layers.Dense(1, activation='sigmoid')
])
我希望对双向 LSTM 有更好理解的人能够就如何做到这一点提供一些指导。谢谢。
【问题讨论】:
标签: python tensorflow lstm recurrent-neural-network one-hot-encoding