【问题标题】:Feeding Numpy Arrays to CNTK LSTM Model将 Numpy 数组输入 CNTK LSTM 模型
【发布时间】:2018-01-05 14:51:18
【问题描述】:

我正在寻找是否有办法将序列数据作为 Numpy 数组提供给 CTNK 中定义的文本 LSTM 模型。我的数据集中的每个实例都是一个映射回单词的整数序列,每个序列的长度不同。似乎可以通过创建reader 函数将其原始文本数据转换为 CTF 格式并将此数据提供给模型,该函数生成小批量,如this 示例中所示。但是,我想知道是否有办法将 Numpy 数组提供给同一模型。

在这个例子的更下方,有一个关于feeding sequences with Numpy 的讨论,我希望这能解决我的问题。但是,该示例处理的是图像序列而不是可变长度的单词序列。在这个例子中,我们最终会得到一个由n 元素组成的张量,每个元素都是3 x 32 x 32,我们可以设置一个期望这些维度的输入变量。但是,在每个序列具有不同长度的单词序列的情况下,这个例子就失效了。

对于基于文本的 LSTM / RNN 的 CTNK 和 Numpy 之间的互操作的任何帮助将不胜感激。

【问题讨论】:

    标签: python arrays numpy deep-learning cntk


    【解决方案1】:

    您可能正在寻找:

    x = cntk.sequence.input_variable(shape=())
    

    这是一个示例小程序,​​演示了它如何处理可变序列长度:

    import numpy as np
    import cntk
    
    # define the model
    x = cntk.sequence.input_variable(shape=())
    z = cntk.sequence.last(x)
    
    # define the data
    a = [[1,2,3], [4,5], [6,7,8,9], [0]]
    b = [np.array(i, dtype=np.float32) for i in a]
    
    # evaluate
    res = z.eval({x: b})
    print(res)
    

    【讨论】:

    • 但是之后如何继续使用 LSTM 呢?
    • x 是 LSTM 的输入特征。当您训练 LSTM 时,只需将您拥有的可变长度 numpy 数组的数组作为输入数据传递。变量b 正在模仿您的输入数据。一个简单的例子-`h = Recurrence(LSTM(150))(x) z = Dense(1024)(h)`
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-24
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多