如何使用mxnet包为R中的前馈神经网络指定正则化参数(L1或L2)?

时间:2017-07-22 17:31:11

标签: r neural-network deep-learning mxnet

我正在使用R mxnet包。这是我目前使用的代码块。但我不确定如何指定正规化。

dpLnModel <- mx.model.FeedForward.create(symbol             = out,
                                         X                  = trainX,
                                         y                  = trainY,
                                         ctx                = mx.cpu(),
                                         num.round          = numIter,
                                         eval.metric        = mx.metric.rmse,
                                         array.batch.size   = 50,
                                         array.layout       = "rowmajor",
                                         verbose            = TRUE,
                                         optimizer          = "rmsprop",
                                         eval.data          = list(data  = testX,
                                                                   label = testY
                                         ),
                                         initializer        = mx.init.normal(initValVar),
                                         epoch.end.callback = mx.callback.log.train.metric(5, logger)
)

2 个答案:

答案 0 :(得分:2)

您可以设置优化程序的weight_decay选项。权重衰减相当于在参数中添加全局l2正则化器。

optimizer = mx.SGD(lr=0.1, momentum=0.9, weight_decay=0.00001)

我对R API并不熟悉,但从Python API来看,我希望你在mx.fit(model, optimizer, train_provider, n_epoch=20, eval_data=eval_provider)中指定优化器,其中第一个参数是mx.FeedForward模型,而不是mx.FeedForward.create模型1}}。

有关详细信息,请参阅文档:https://media.readthedocs.org/pdf/mxnet-test/latest/mxnet-test.pdf

答案 1 :(得分:1)

正如@ leezu的答案所说,你需要设定体重衰减以获得L2正规化。在R API中,您需要的参数是wd,例如

dpLnModel <- mx.model.FeedForward.create(symbol             = out,
                                         X                  = trainX,
                                         y                  = trainY,
                                         ctx                = mx.cpu(),
                                         num.round          = numIter,
                                         eval.metric        = mx.metric.rmse,
                                         array.batch.size   = 50,
                                         array.layout       = "rowmajor",
                                         verbose            = TRUE,
                                         optimizer          = "rmsprop",
                                         wd                 = 0.00001)

我认为你可以包含来自mx.opt.rmsprop的任何参数。请注意,那里的文档说明wd的默认值为零,即没有正则化。