我正在实现一个用于序列分类的LSTM神经网络。我希望设计一个具有以下参数的网络:
- 输入:一个包含
n
个独热编码向量的序列。 - 网络拓扑:两层LSTM网络。
- 输出:给定序列属于某一类别的概率(二分类)。我只想考虑第二层LSTM的最后一个输出。
我需要在CNTK中实现这个,但由于其文档编写得不够好,我遇到了困难。有人能帮我吗?
回答:
有一个序列分类示例,完全符合您的需求。
唯一的区别是它只使用了一个LSTM层。您可以通过更改以下代码轻松地将其改为使用多层:
LSTM_function = LSTMP_component_with_self_stabilization( embedding_function.output, LSTM_dim, cell_dim)[0]
改为:
num_layers = 2 # 例如encoder_output = embedding_function.outputfor i in range(0, num_layers): encoder_output = LSTMP_component_with_self_stabilization(encoder_output.output, LSTM_dim, cell_dim)
然而,使用新的层库会更有帮助。这样您可以简单地这样做:
encoder_output = Stabilizer()(input_sequence)for i in range(0, num_layers): encoder_output = Recurrence(LSTM(hidden_dim)) (encoder_output.output)
然后,为了获得您将放入密集输出层的最终输出,您可以首先这样做:
final_output = sequence.last(encoder_output)
然后
z = Dense(vocab_dim) (final_output)