代码之家  ›  专栏  ›  技术社区  ›  Marcin Możejko

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

  •  1
  • Marcin Możejko  · 技术社区  · 9 年前

    我正在研究用于序列分类的LSTM神经网络的实现。我想设计一个具有以下参数的网络:

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

    我需要在CNTK中实现它,但我很挣扎,因为它的文档编写得不是很好。有人能帮我吗?

    4 回复  |  直到 9 年前
        1
  •  6
  •   William Darling    9 年前

    有一个 sequence classification example 这正是你要找的。

    LSTM_function = LSTMP_component_with_self_stabilization(
        embedding_function.output, LSTM_dim, cell_dim)[0]
    

    至:

    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)
    

    然而,使用新的图层库会更好地为您服务。然后您可以简单地这样做:

    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)
    
        2
  •  2
  •   Oron Nir    9 年前

    here 您可以找到一种简单的方法,只需添加额外的层,如:

    Sequential([
            Recurrence(LSTM(hidden_dim), go_backwards=False),
            Recurrence(LSTM(hidden_dim), go_backwards=False),
            Dense(label_dim, activation=sigmoid)
        ])
    

    训练、测试和应用。。。

        3
  •  2
  •   approxiblue Ben Jackson    9 年前

    CNTK发布了一个 hands-on tutorial 对于具有端到端配方的语言理解:

    这个实践实验室展示了如何实现一个循环网络来处理文本 Air Travel Information Services (ATIS)时隙标记任务(将单个单词标记到各自的类别,其中类别在训练数据集中作为标签提供)。我们将从直接嵌入单词开始,然后是重复的LSTM。然后将扩展到包括相邻单词并双向运行。最后,我们将把这个系统变成一个意图分类器。

        4
  •  1
  •   zuuz    9 年前

    我不熟悉CNTK。但是,既然这个问题一直没有得到回答,我也许可以建议一些建议来帮助您实现它? 我不确定您在这些架构方面有多少经验;但在转到CNTK(它似乎有一个不太活跃的社区)之前,我建议查看其他流行的存储库(如Theano、tensurflow等)

    例如,此处给出了一个类似的任务: kyunghyuncho tutorials 。只需查找“def-lstm_layer”以获取定义。 火炬示例见 Karpathy's very popular tutorials

    希望这有点帮助。。