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.
Merci) C'était moi. –
@AlexeyBurnakov Je ne savais pas que vous aviez réglé le problème vous-même. C'est génial! –
J'étais le journaliste.) –