2017-09-13 51 views
2

這是預期的行爲嗎?R mxnet 1 pass返回NAN作爲損失值

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上的樣品與大小比1以上的minibatch計算損耗值的圓(通過)總是返回NaN,而2分更多次給予從第二通開始的有限值。

如果樣本數量是minibatch(例如64/8)的n倍,那麼即使在1輪之後,損失也是可計算的。

回答

0

這是MXNet中的一個問題,報告爲here並且已修復here

+0

謝謝)這是我。 –

+0

@AlexeyBurnakov沒有意識到你自己解決了這個問題。棒極了! –

+0

我是記者。 ) –