2017-06-17 3 views
1

J'essaie d'utiliser un RNN dans MXNet pour effectuer une classification. Mes données ressemblent grossièrement aux matrices m0 et m1 que j'ai créées. m0 représente par ex. la consommation d'énergie d'un appareil au fil du temps, tandis que m1 est mon étiquette pour dire comment l'appareil doit être classé (par exemple binaire dans ce cas). Mon objectif est de détecter la catégorie d'un appareil en regardant la consommation d'énergie au fil du temps. Je continue à recevoir des erreurs concernant une différence de forme et je ne trouve pas de solution en changeant les paramètres d'entrée. Vous pouvez voir mon code et mes messages d'erreur ci-dessous. J'apprécie toutes les suggestions sur la façon de gérer ce problème.Incompatibilité de forme à l'aide de RNN dans MXNet - R

require(mxnet) 

m0 <- matrix(runif(200*100), 100, 200) 
m1 <- matrix(round(runif(1*200)), 1, 200) 

num.round  <- 10 
update.period <- 1 
num.rnn.layer <- 1 
seq.len  <- 100 
num.hidden  <- 1 
num.embed  <- 1 
num.label  <- 1 
batch.size  <- 1 
input.size  <- 1 
learning.rate <- 0.1 

X.train <- list(data = m0, label = m1) 

model <- mx.rnn(train.data = X.train, 
       eval.data = NULL, 
       num.rnn.layer = num.rnn.layer, 
       seq.len = seq.len, 
       num.hidden = num.hidden, 
       num.embed = num.embed, 
       num.label = num.label, 
       batch.size = batch.size, 
       input.size = input.size, 
       ctx = mx.cpu(), 
       num.round = num.round, 
       update.period = update.period, 
       initializer = mx.init.uniform(0.1), 
       learning.rate = learning.rate) 

[16:07:02] d: \ program (x86) \ jenkins \ espace de travail \ mxnet \ mxnet \ opérateur src \ \ tensor./matrix_op-inl.h: 144: L'utilisation de target_shape sera obsolète.

[16:07:02] d: \ program files (x86) \ jenkins \ workspace \ mxnet \ mxnet \ src \ opérateur \ tensor./matrix_op-inl.h: 144: En utilisant target_shape seront dépréciés .

[16:07:02] d: \ program files (x86) \ jenkins \ workspace \ mxnet \ mxnet \ src \ opérateur \ tensor./matrix_op-inl.h: 144: En utilisant target_shape seront dépréciés .

[16:07:02] D: \ Program (x86) \ espace de travail Jenkins \ \ mxnet \ mxnet \ DCTM-core \ include \ DCTM/logging.h: 304:

[16: 07:02] D: \ Program Files (x86) \ Jenkins \ espace de travail \ mxnet \ mxnet \ src \ ndarray \ ndarray.cc: 299: vérification Échec: from.shape() == to-> shape() opérandes façonner mismatchfrom.shape = (1,1) = to.shape (1100) erreur dans exec update.arg.arrays de $ (arg.arrays, match.name, skip.null):

[16:07 : 02] D: \ Program Files (x86) \ Jenkins \ espace de travail \ mxnet \ mxnet \ src \ ndarray \ ndarr ay.cc:299: Départ échoué: from.shape() == A-> forme() opérandes forme mismatchfrom.shape = (1,1) to.shape = (1.100)

Répondre

1

La raison pour laquelle pour l'incohérence de dimension est que vous passez une dimension pour label qui ne correspond pas à la longueur de la séquence. Un RNN a une sortie pour chaque tap de la séquence, donc si votre longueur est de 100, il aura 100 sorties, une pour chaque pas de temps. Vous pouvez corriger cette erreur en définissant m1 sur matrix(round(runif(100*200)), 100, 200), mais vous ne pouvez pas faire ce que vous voulez (c'est-à-dire prévoir un nombre pour la séquence entière) en utilisant l'interface simplifiée mx.rnn(). Vous devez implémenter votre propre réseau basé sur le code here. Pour atteindre la sortie unique que vous recherchez, vous pouvez ignorer toutes les sorties, sauf celles du dernier pas de temps, et passer à travers une couche Softmax.