【问题标题】:Defining non-trainable variables in MXNet在 MXNet 中定义不可训练的变量
【发布时间】:2017-02-03 17:55:32
【问题描述】:

我目前正在尝试使用 MXNet R API 设置前馈 NN。我想实现一个自定义损失函数,它使用我自己定义的预先固定的权重为 c(7,8,9)。在 Tensorflow 中,可以选择将变量定义为不可训练,以确保这些变量在训练过程中不会被修改。这正是我的体重所需要的!不幸的是,我还没有找到任何实现这一点的方法。这是我的代码:

data <- mx.symbol.Variable('data')
label <- mx.symbol.Variable('label')
weights <- mx.symbol.Variable(name='weights')

... [some network layers]...

fc2 <- mx.symbol.FullyConnected(data=tanh3, num_hidden=length(predictable_errors))
softmax <- mx.symbol.SoftmaxActivation(data=fc2, name="softmax_activation")
weighted_l2 <- mx.symbol.sum(mx.symbol.square(softmax - label)*weights)
loss <- mx.symbol.MakeLoss(data=weighted_l2)

model <- mx.model.FeedForward.create(loss, X=train.x, y=train.y, ctx=mx.cpu(), arg.params = list(weights=mx.nd.array( array(c(7,8,9), dim=c(3,1)), mx.cpu() )), num.round=1, learning.rate=0.05, momentum=0.9, array.batch.size = 1, eval.metric=mx.metric.accuracy, epoch.end.callback=mx.callback.log.train.metric(1))

我知道 Python API 提供了 set_lr_mult 函数,我可以使用它将“权重”的学习率设置为零,但对于 R,这似乎不是一个选项。你有什么建议吗?

非常感谢!

【问题讨论】:

    标签: r mxnet


    【解决方案1】:

    你可以用Module代替FeedForward,当你使用module时,你可以传递你不想训练的固定参数。

    model <- mx.mod.Module(loss, data_names, label_names, ctx=mx.cpu(),
                                fixed_param_names=[list of parameters you do not want to train for])
    

    您可以阅读更多here

    【讨论】:

    • 感谢您的回复!我研究了模型 API,它似乎只适用于 Python。虽然我准备在没有替代品的情况下切换到 Python,但我首先想探索 R API 的所有可能性。
    猜你喜欢
    • 1970-01-01
    • 2016-09-16
    • 1970-01-01
    • 1970-01-01
    • 2019-05-28
    • 2019-06-27
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    相关资源
    最近更新 更多