R-mxnet RNN“第0个输出的节点中的attr不兼容”

时间:2018-11-17 23:55:03

标签: r rnn mxnet

我正在为单词级语言模型开发多层RNN。它具有一对一的配置,因此对于训练集中的每个步骤,都针对相同维度的评估集验证了预测。该模型几乎完全借鉴了here的示例,但适用于单词级建模。我的变化是here

上面链接的示例脚本之间的另一个区别是我使用的数据具有多个存储桶。我相信我已经正确存储了数据,但是当数据被馈送到mx.model.buckets时,我得到了该错误的一些变化:

Start training with 1 devices
Error in exec$update.arg.arrays(arg.arrays, match.name, skip.null) : 
  [17:25:59] `c:\jenkins\workspace\mxnet\mxnet\src\operator\tensor\../elemwise_op_common.h:123: Check failed: assign(&dattr, (*vec)[i]) Incompatible attr in node  at 0-th output: expected [32,7], got [32,8]`

问题似乎是实际输入尺寸和预期输入尺寸之间不匹配。批处理大小为32,值7和8与bucket.plan中的连续存储桶有关。

train_data <- mx.io.bucket.iter(buckets = train_buckets$buckets,
                                batch.size = batch_size, 
                                data.mask.element = 0, shuffle = TRUE)

eval_data <- mx.io.bucket.iter(buckets = eval_buckets$buckets,
                               batch.size = batch_size,
                               data.mask.element = 0, shuffle = TRUE)

从上面的迭代器中,我可以提取批处理和存储桶数据:

> head(train_data$bucket.plan, 10)
 8  9 10  3 22 10 10  8 15 21 
 1  1  1  1  1  2  3  2  1  1 
> train_data$batch
[1] 1
> train_data$bucketID
8 
1 

train_data$batch中的值在bucket.iter中用作从train_data$bucket.plan中提取下一个存储桶名称的索引:

iter.next = function() {
        .self$batch <- .self$batch + 1
        .self$bucketID <- .self$bucket.plan[batch]

存储桶名称对应于分配给它们的句子的长度减1。因此,对于存储桶8,批处理尺寸应为[32,7],这是训练函数所期望的。但是如错误所述,它实际上是为bucket.plan[2]选择输入尺寸。

在其他情况下,第一个批次成功进行训练仅在第二个批次上引发错误,在该错误中,预期bucket.plan[n]处的存储桶输入尺寸,但返回bucket.plan[n-1]的尺寸代替:

Start training with 1 devices
Error in exec$update.arg.arrays(arg.arrays, match.name, skip.null) : 
  [17:37:53] c:\jenkins\workspace\mxnet\mxnet\src\operator\tensor\../elemwise_op_common.h:123: Check failed: assign(&dattr, (*vec)[i]) Incompatible attr in node  at 0-th output: expected [32,42], got [32,10]
> head(train_data$bucket.plan, 10)
11 43  8  6  7  3  6 12 15 12 
 1  1  1  1  1  1  2  1  1  2 
> train_data$batch
[1] 2
> train_data$bucketID
43 
 1 

数据和标签之间似乎没有不匹配:

> dim(train_data$buckets[[names(train_data$bucketID)]]$data)
[1]  42 186
> dim(train_data$buckets[[names(train_data$bucketID)]]$label)
[1]  42 186

我认为这里讨论的脚本是incubator-mxnet/R-package/R/mx.io.bucket.iter.Rincubator-mxnet/R-package/R/executor.R。由于某些原因,用于遍历bucket.plan的索引似乎没有正确更新。

我已经找到了与此主题相关的其他主题,但是没有什么可以帮助我解决该错误。

有什么想法吗?

0 个答案:

没有答案