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