正确格式化R / mxnet中的lstm递归神经网络的数据

时间:2016-12-23 01:29:11

标签: r neural-network mxnet

我想使用R包mxnet中的mx.lstm函数训练一个神经网络。我的数据包括 n 特征向量,标记类的向量和时间向量,非常类似于这个虚拟示例,其中X1,X2,X3是特征:

dat <- data.frame(
  X1 = rnorm(100, 1, sd = 1),
  X2 = rnorm(100, 2, sd = 1),
  X3 = rnorm(100, 3, sd = 1),
  class = sample(c(1,0), replace = T, 100),
  time =  seq(0.01,1,0.01))

mx.lstm的帮助声明train.data参数需要“mx.io.DataIter或list(data = R.array,label = R.array)训练集”。

我试过这个:

library(mxnet)

# Convert dummy data into suitable format
trainDat <- list(data = array(c(dat$X1, dat$X2, dat$X3), dim = c(100,3)), 
label = array(dat[,4], dim = c(100,1)))

# Set the basic network parameters for the lstm (arbitrary for this example)
batch.size = 32
seq.len = 32
num.hidden = 16
num.embed = 16
num.lstm.layer = 1
num.round = 1
learning.rate = 0.1
wd = 0.00001
clip_gradient = 1
update.period = 1

# Run the model
model <- mx.lstm(train.data = trainDat,
             ctx=mx.cpu(),
             num.round=num.round, 
             update.period=update.period,
             num.lstm.layer=num.lstm.layer, 
             seq.len=seq.len,
             num.hidden=num.hidden, 
             num.embed=num.embed, 
             num.label=vocab,
             batch.size=batch.size, 
             input.size=vocab,
             initializer=mx.init.uniform(0.1), 
             learning.rate=learning.rate,
             wd=wd,
             clip_gradient=clip_gradient)

返回“mx.io.internal.arrayiter中的错误(as.array(data),as.array(label),unif.rnds,:   basic_string的:: _ M_replace_aux“

mxnet网站上有一个示例lstm,但所使用的数据与我的完全不同,我无法理解它。

http://mxnet.io/tutorials/r/charRnnModel.html

所以,我的问题是如何将我的数据转换为适合mx.lstm的格式?

1 个答案:

答案 0 :(得分:3)

我尝试重现您的错误并收到更详细的消息:

mx.io.internal.arrayiter中的错误(as.array(data),as.array(label),unif.rnds,:   io.cc:50:看起来X,y是以行为主要方式传递的,MXNetR采用了列主要约定。 请通过X的转置

我通过将数据和标签数组传递给aperm()来修复错误。

trainDat <- list(data = aperm(array(c(dat$X1, dat$X2, dat$X3), dim = c(100,3))), label = aperm(array(dat[,4], dim = c(100,1))))