【问题标题】:CNTK RuntimeError: AddSequence: Sequences must be a least one frame longCNTK RuntimeError: AddSequence: 序列必须至少一帧长
【发布时间】:2017-03-13 10:46:56
【问题描述】:

我在以下代码中遇到错误:

x = cntk.input_variable(shape=c(8,3,1))
y = cntk.sequence.slice(x,1,0)
x0 = np.reshape(np.arange(48.0,dtype=np.float32),(2,8,1,3))
y.eval({x:x0})

Error : Sequences must be a least one frame long

但是当我运行它时它运行良好:

x = cntk.input_variable(shape=c(3,2)) #change
y = cntk.sequence.slice(x,1,0)
x0 = np.reshape(np.arange(24.0,dtype=np.float32),(1,8,1,3))  #change
y.eval({x:x0})

我无法理解slice方法中的一些东西:

  1. 它将在哪个数组级别进行切片。
  2. 附件。对于文档,第二个参数是begin_index,旁边是end_indexbeing_index怎么会大于end_index

【问题讨论】:

    标签: python cntk


    【解决方案1】:

    slice() 有两个版本,一个用于切片张量,一个用于切片序列。您的示例将其用于序列。

    如果您的输入是序列(例如单词),第一种形式 cntk.slice() 将单独对序列的每个元素进行切片,并创建一个由切片张量组成的长度相同的序列。第二种形式,cntk.sequence.slice(),将从序列中切出一系列条目。例如。 cntk.sequence.slice(x, 13, 42) 将从x 中删除序列项 13..41,并创建一个长度为 (42-13) 的新序列。

    如果您打算尝试第一种形式,请更改为cntk.slice()。如果您指的是序列版本,请尝试将x0 包含在额外的[...] 中。传递小批量数据的规范形式是批处理条目列表(例如,MB 大小为 128 --> 包含 128 个条目的列表),其中每个批处理条目是形状为 (Ti,) + input_shape 的张量,其中 Ti 是序列长度各自的序列。这个

    x0 = [ np.reshape(np.arange(48.0,dtype=np.float32),(2,8,1,3)) ]
    

    将表示具有单个条目(1 个列表条目)的小批量,其中条目是 2 个序列项的序列,其中每个序列项的形状为 (8,1,3)。

    开始和结束索引可以是负数,以便从末尾开始索引(类似于 Python 切片)。然而,与 Python 不同的是,0 是一个有效的结束索引,它引用结束。

    【讨论】:

      猜你喜欢
      • 2022-01-13
      • 2022-08-21
      • 1970-01-01
      • 2014-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-01
      • 1970-01-01
      相关资源
      最近更新 更多