2017-09-13 6 views
2

Est-ce que ce comportement est attendu?R mxnet 1 passe renvoie NAN comme valeur de perte

library(mxnet) 

hidden_u_1 <- 100 
activ_hidden_1 <- 'tanh' 

hidden_u_2 <- 1 

learn_rate <- 0.001 

initializer <- mx.init.uniform(1) 

optimizer <- 'rmsprop' #sgd 

loss <- mx.metric.mse 

device.cpu <- mx.cpu() 

mini_batch <- 64 #8 

rounds <- 1 #2 


## data symbols 

nn_data <- mx.symbol.Variable('data') 
nn_label <- mx.symbol.Variable('label') 


## first fully connected layer 

flatten <- mx.symbol.Flatten(data = nn_data) 

fc1 <- mx.symbol.FullyConnected(data = flatten 
           , num_hidden = hidden_u_1) 

activ1 <- mx.symbol.Activation(data = fc1, act.type = activ_hidden_1) 

## second fully connected layer 

fc2 <- mx.symbol.FullyConnected(data = activ1, num_hidden = hidden_u_2) 

q_func <- mx.symbol.LinearRegressionOutput(data = fc2, label = nn_label, name = 'regr') 


# initialize NN 

train.x <- matrix(rnorm(640, 0, 1), ncol = 10) 
train.x <- t(train.x) 
dim(train.x) <- c(nrow(train.x), 1, 1, ncol(train.x)) 
train.y = rnorm(64, 0, 1) 

nn_model <- mx.model.FeedForward.create(
    symbol = q_func, 
    X = train.x, 
    y = train.y, 
    ctx = device.cpu, 
    num.round = rounds, 
    array.batch.size = mini_batch, 
    optimizer = optimizer, 
    eval.metric = loss, 
    learning.rate = learn_rate, 
    initializer = initializer 
) 

1 tour (pass) de calcul de valeurs de perte sur un minibatch d'échantillons avec une taille supérieure à 1 renvoie toujours NaN, tandis que 2 et plusieurs passages donnent des valeurs finies à partir de passe 2e.

Si le nombre d'échantillons est n fois supérieur à minibatch (par exemple, 64/8), alors même après 1 tour, la perte est calculable.

Répondre

0

Il s'agit d'un problème dans MXNet signalé here et corrigé here.

+0

Merci) C'était moi. –

+0

@AlexeyBurnakov Je ne savais pas que vous aviez réglé le problème vous-même. C'est génial! –

+0

J'étais le journaliste.) –