การจัดรูปแบบข้อมูลอย่างถูกต้องสำหรับเครือข่ายประสาทเทียม lstm ที่เกิดซ้ำใน R / mxnet

ฉันต้องการฝึก lstm neural net โดยใช้ฟังก์ชัน mx.lstm ในแพ็คเกจ R mxnet ข้อมูลของฉันประกอบด้วยเวกเตอร์คุณลักษณะ 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) 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)

ซึ่งส่งคืน "ข้อผิดพลาดใน mx.io.internal.arrayiter(as.array(data), as.array(label), unif.rnds, : basic_string::_M_replace_aux"

มีตัวอย่าง lstm บนเว็บไซต์ mxnet แต่ข้อมูลที่ใช้ค่อนข้างแตกต่างจากของฉัน และฉันไม่สามารถเข้าใจได้

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

คำถามของฉันคือ ฉันจะแปลงข้อมูลให้อยู่ในรูปแบบที่เหมาะสมสำหรับ mx.lstm ได้อย่างไร


person RCW    schedule 23.12.2016    source แหล่งที่มา


คำตอบ (1)


ฉันพยายามสร้างข้อผิดพลาดของคุณอีกครั้งและได้รับข้อความที่มีรายละเอียดมากขึ้น:

ข้อผิดพลาดใน mx.io.internal.arrayiter(as.array(data), as.array(label), unif.rnds, : io.cc:50: ดูเหมือนว่า X, y ถูกส่งผ่านในวิธีหลักของ Row, MXNetR ใช้ แบบแผนหลักของคอลัมน์ โปรดส่งผ่าน in transpose ของ 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))))
person lynguyen    schedule 27.12.2016