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



我正在使用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)
)

您可以设置优化器的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

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

正如@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的默认值为零,即没有正则化。

最新更新