【问题标题】:CNTK - LSTM Recurrence with input values from previous layersCNTK - 具有前一层输入值的 LSTM 递归
【发布时间】:2018-04-12 16:01:39
【问题描述】:

我正在努力用 LSTM 单元重复实现我的模型。我想使用密集层的输出作为循环序列的输入,但我不知道该怎么做。

这是我想要实现的示例代码:

import cntk as C
import numpy as np

a = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

x = C.input_variable(a.shape, name='Input Variable')

m = C.layers.Convolution1D(filter_shape=3,
                         num_filters=4,
                         strides=(2),
                         reduction_rank=0,
                         pad=True, name='Convolutional layer')(x)

m = C.layers.Dense(5, activation=None, name='Dense layer')(m)


m = C.layers.RecurrenceFrom(C.layers.LSTM(3,name='LSTM Layer'), name='Reccurence Layer')(m)

这是我想象中的图片 (based on this tutorial):

picture

运行代码后从控制台输出:

>>> m = C.layers.RecurrenceFrom(C.layers.LSTM(3,name='LSTM Layer'), name='Reccurence Layer')(m)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\Maros\Anaconda3\lib\site-packages\cntk\ops\functions.py", line 374, in __call__
    arg_map = self.argument_map(*args, **kwargs)
  File "C:\Users\Maros\Anaconda3\lib\site-packages\cntk\ops\functions.py", line 263, in argument_map
    raise TypeError("CNTK Function expected {} arguments, got {}".format(len(params), len(args) + len(kwargs)))
TypeError: CNTK Function expected 3 arguments, got 1

【问题讨论】:

    标签: lstm recurrence cntk


    【解决方案1】:

    您应该使用C.layers.Recurrence 而不是C.layers.RecurrenceFrom。后者用于建立具有序列输入和动态初始值的循环层,而前者只需要一个序列输入。详情请见help(C.layers.Recurrence)

    【讨论】:

    • 你是对的。我在使用C.layers.Recurrence 时遇到了问题,所以我认为C.layers.RecurrenceFrom 是我需要的。经过反复试验,我设法解决了我的问题,同时使用C.ops.to_sequence 函数将我的输出从密集层转换为C.layers.Recurrence 的序列。希望是正确的。
    【解决方案2】:

    这是我更改后的示例代码。

    import cntk as C
    import numpy as np
    
    a = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
    
    x = C.input_variable(a.shape, name='Input Variable')
    
    m = C.layers.Convolution1D(filter_shape=3,
                             num_filters=4,
                             strides=(2),
                             reduction_rank=0,
                             pad=True, name='Convolutional layer')(x)
    
    m = C.layers.Dense((5,1), activation=None, name='Dense layer')(m)
    
    m = C.ops.to_sequence(m)
    
    m = C.layers.Recurrence(C.layers.LSTM(3,name='LSTM Layer'), name='Reccurence Layer')(m)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-05
      • 2021-10-07
      • 2020-04-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多