Ошибка, связанная с формой данных при запуске MXNetR

Я пытаюсь построить нейронную сеть с прямой связью с помощью MXNetR. Мой ввод представляет собой фрейм данных с 6380 строками и 180 столбцами. Мои результаты обучения и тестирования представляют собой одномерные векторы с 319 элементами каждый.

Я запускаю модель с размером пакета, равным 1, и числом нейронов в выходном слое, равным 319. Таким образом, для каждого пакета я ожидал получить вектор с 319 элементами. Я стремлюсь минимизировать свою функцию потерь, которая представляет собой корреляцию между моим предсказанным выходным вектором и фактическим выходным вектором.

Ниже мой код:

    # Define the input data
    data <- mx.symbol.Variable("data")

    # Define the first fully connected layer
    fc1 <- mx.symbol.FullyConnected(data, num_hidden = 100)
    act.fun <- mx.symbol.Activation(fc1, act_type = "relu") # create a hidden layer with Rectified Linear Unit as its activation function.
    output <<- mx.symbol.FullyConnected(act.fun, num_hidden = 319)

    # Customize loss function
    label <- mx.symbol.Variable("label")
    lro <-
        mx.symbol.MakeLoss(mx.symbol.Correlation(mx.symbol.reshape(output 
    ,shape = (1,319)),label))

    model <- mx.model.FeedForward.create(symbol=lro, X=train.x, 
                                         y=train.y,
                                         eval.data = list( data = test.x, 
                                                       label = test.y),
                                         num.round=5000, 
                                         array.batch.size=1, 
                                         optimizer = "adam",
                                         learning.rate = 0.0003, 
                                         eval.metric = mx.metric.rmse,
                                         epoch.end.callback = 
                                         mx.callback.log.train.metric(20, logger))

И вот ошибка, когда я запускаю код выше:

[15:49:28] /home/cgagnon/src/q5/mxnet/dmlc-core/include/dmlc/./logging.h:304: [15:49:28] src/operator/./correlation-inl.h:176: Check failed: dshape1.ndim() == 4U (2 vs. 4) data should be a 4D tensor

Stack trace returned 10 entries:
[bt] (0) /usr/lib64/R/library/mxnet/libs/libmxnet.so(_ZN4dmlc15LogMessageFatalD1Ev+0x29) [0x7f725a8528b9]
[bt] (1) /usr/lib64/R/library/mxnet/libs/libmxnet.so(_ZNK5mxnet2op15CorrelationProp10InferShapeEPSt6vectorIN4nnvm6TShapeESaIS4_EES7_S7_+0x2a2) [0x7f725b4a8222]
[bt] (2) /usr/lib64/R/library/mxnet/libs/libmxnet.so(+0xd461f9) [0x7f725b3241f9]
[bt] (3) /usr/lib64/R/library/mxnet/libs/libmxnet.so(+0x116630f) [0x7f725b74430f]
[bt] (4) /usr/lib64/R/library/mxnet/libs/libmxnet.so(+0x1167bb2) [0x7f725b745bb2]
[bt] (5) /usr/lib64/R/library/mxnet/libs/libmxnet.so(_ZN4nnvm11ApplyPassesENS_5GraphERKSt6vectorISsSaISsEE+0x501) [0x7f725b761481]
[bt] (6) /usr/lib64/R/library/mxnet/libs/libmxnet.so(_ZN4nnvm9ApplyPassENS_5GraphERKSs+0x8e) [0x7f725b699f2e]
[bt] (7) /usr/lib64/R/library/mxnet/libs/libmxnet.so(_ZN4nnvm4pass10InferShapeENS_5GraphESt6vectorINS_6TShapeESaIS3_EESs+0x240) [0x7f725b69c520]
[bt] (8) /usr/lib64/R/library/mxnet/libs/libmxnet.so(MXSymbolInferShape+0x281) [0x7f725b6959a1]
[bt] (9) /usr/lib64/R/library/mxnet/libs/mxnet.so(_ZNK5mxnet1R6Symbol10InferShapeERKN4Rcpp6VectorILi19ENS2_15PreserveStorageEEE+0x6b9) [0x7f724cef6739]

На данный момент я не знаю, как мне исправить эту ошибку. Я искал способ изменить свои наборы данных, чтобы они были четырехмерными тензорами, но не смог их найти. Я не ищу явного решения своей проблемы, но любые предложения о том, как мне решить эту ошибку, будут очень признательны.


person nnguyen24    schedule 06.06.2017    source источник


Ответы (1)


Я не мог воспроизвести проблему без данных, но я думаю, что если вы хотите просто преобразовать свой набор данных в четырехмерные тензоры, вы сможете сделать это с помощью «symbol.reshape(output,shape = c(1,1,1,319) ))". Хотя не уверен, что вам это поможет.

person Roshani Nagmote    schedule 06.06.2017
comment
Я изменил свой код, как вы предложили, но такая же ошибка все еще появляется. По некоторым соображениям конфиденциальности я не могу поделиться с вами своим набором данных, но я считаю, что ошибка заключается в измерении набора данных, а не в содержании. - person nnguyen24; 07.06.2017