如何在CNTK中实现序列分类LSTM网络?

Mar*_*jko 1 machine-learning neural-network lstm recurrent-neural-network cntk

我正致力于LSTM神经网络的实施,用于序列分类.我想用以下参数设计一个网络:

  1. 输入:一个n热矢量序列.
  2. 网络拓扑:双层LSTM网络.
  3. 输出:给定序列属于类的概率(二进制分类).我想只考虑第二个LSTM层的最后一个输出.

我需要在CNTK中实现它,但我很难,因为它的文档编写得不是很好.有人可以帮助我吗?

Wil*_*ing 6

有一个序列分类示例紧跟您正在寻找的内容.

唯一的区别是它只使​​用一个LSTM层.您可以通过更改以下内容轻松更改此网络以使用多个图层:

LSTM_function = LSTMP_component_with_self_stabilization(
    embedding_function.output, LSTM_dim, cell_dim)[0]
Run Code Online (Sandbox Code Playgroud)

至:

num_layers = 2 # for example
encoder_output = embedding_function.output
for i in range(0, num_layers):
    encoder_output = LSTMP_component_with_self_stabilization(encoder_output.output, LSTM_dim, cell_dim)
Run Code Online (Sandbox Code Playgroud)

但是,使用新的图层库可以更好地满足您的需求.然后你可以简单地这样做:

encoder_output = Stabilizer()(input_sequence)
for i in range(0, num_layers):
    encoder_output = Recurrence(LSTM(hidden_dim)) (encoder_output.output)
Run Code Online (Sandbox Code Playgroud)

然后,为了获得您放入密集输出层的最终输出,您可以先执行以下操作:

final_output = sequence.last(encoder_output)
Run Code Online (Sandbox Code Playgroud)

然后

z = Dense(vocab_dim) (final_output)
Run Code Online (Sandbox Code Playgroud)