在R中使用mxnet包调用CustomCSVIter函数

在R中使用mxnet包调用CustomCSVIter函数,r,deep-learning,conv-neural-network,mxnet,R,Deep Learning,Conv Neural Network,Mxnet,我正在尝试在字符级别训练文本数据集列表(例如,cat=>“a”、“c”、“a”、“t”),以便能够非常准确地对它们进行分类。我在R中使用mxnet软件包(CNN网络),并使用绉纱模型。所以为了准备培训,我需要对培训和测试数据集进行迭代。因此,代码如下所示: train.iter <- CustomCSVIter$new(iter=NULL, data.csv=train.file.output, batch.size=args$ba

我正在尝试在字符级别训练文本数据集列表(例如,cat=>“a”、“c”、“a”、“t”),以便能够非常准确地对它们进行分类。我在R中使用mxnet软件包(CNN网络),并使用绉纱模型。所以为了准备培训,我需要对培训和测试数据集进行迭代。因此,代码如下所示:

train.iter <- CustomCSVIter$new(iter=NULL, data.csv=train.file.output, 
                            batch.size=args$batch_size, alphabet=alphabet,
                            feature.len=feature.len)  
test.iter <- CustomCSVIter$new(iter=NULL, data.csv=test.file.output, 
                           batch.size=args$batch_size, alphabet=alphabet, 
                           feature.len=feature.len)

train.iter当输入文件的形状与迭代器的data.shape参数不匹配时,通常会出现这样的问题

通过在RStudio外部运行代码,您可以轻松检查这是否是问题所在。从终端/命令行运行R并将代码粘贴到那里。当异常发生时,它将终止R会话,您将能够读取异常消息。我的情况是:

检查失败:row.length==shape.Size()

在你的情况下,可能是类似的。
顺便说一句,有一个用于MNIST数据集的自定义迭代器的实现,您可能会发现它很有用:

当输入文件的形状与迭代器的data.shape参数不匹配时,通常会出现这样的问题

通过在RStudio外部运行代码,您可以轻松检查这是否是问题所在。从终端/命令行运行R并将代码粘贴到那里。当异常发生时,它将终止R会话,您将能够读取异常消息。我的情况是:

检查失败:row.length==shape.Size()

在你的情况下,可能是类似的。 顺便说一句,有一个用于MNIST数据集的自定义迭代器的实现,您可能会发现它很有用:

CustomCSVIter <- setRefClass("CustomCSVIter",
                         fields=c("iter", "data.csv", "batch.size",
                                  "alphabet","feature.len"),
                         contains = "Rcpp_MXArrayDataIter",
                         methods=list(
                           initialize=function(iter, data.csv, batch.size,
                                               alphabet, feature.len){
                             csv_iter <- mx.io.CSVIter(data.csv=data.csv, 
                                                       data.shape=feature.len+1, #=features + label
                                                       batch.size=batch.size)
                             .self$iter <- csv_iter 
                             .self$data.csv <- data.csv
                             .self$batch.size <- batch.size
                             .self$alphabet <- alphabet
                             .self$feature.len <- feature.len
                             .self
                           },
                           value=function(){
                             val <- as.array(.self$iter$value()$data)
                             val.y <- val[1,]
                             val.x <- val[-1,]
                             val.x <- dict.decoder(data=val.x, 
                                                   alphabet=.self$alphabet,
                                                   feature.len=.self$feature.len,
                                                   batch.size=.self$batch.size)
                             val.x <- mx.nd.array(val.x)
                             val.y <- mx.nd.array(val.y)
                             list(data=val.x, label=val.y)
                           },
                           iter.next=function(){
                             .self$iter$iter.next()
                           },
                           reset=function(){
                             .self$iter$reset()
                           },
                           num.pad=function(){
                             .self$iter$num.pad()
                           },
                           finalize=function(){
                             .self$iter$finalize()
                           }
                         )