在 R / mxnet 中正确格式化 lstm 递归神经网络的数据
Correctly formatting data for lstm recurrent neural network in R / mxnet
我想使用 R 包 mxnet 中的 mx.lstm 函数训练一个 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 or list(data=R.array, label=R.array) The Training set"。
我试过这个:
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)
returns“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 的格式?
我尝试重现您的错误并收到更详细的消息:
mx.io.internal.arrayiter(as.array(数据),as.array(标签),unif.rnds,错误:
io.cc:50: 好像X, y是以Row major方式传递的,MXNetR采用column major约定。
请改为传递 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))))
我想使用 R 包 mxnet 中的 mx.lstm 函数训练一个 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 or list(data=R.array, label=R.array) The Training set"。
我试过这个:
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)
returns“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 的格式?
我尝试重现您的错误并收到更详细的消息:
mx.io.internal.arrayiter(as.array(数据),as.array(标签),unif.rnds,错误: io.cc:50: 好像X, y是以Row major方式传递的,MXNetR采用column major约定。 请改为传递 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))))