【问题标题】:how to use customized loss function with mxnet?如何在 mxnet 中使用自定义的损失函数?
【发布时间】:2018-03-22 13:57:34
【问题描述】:

我尝试学习如何在 mxnet 中使用自定义损失函数。

Bellow 是线性回归的最小(非)工作示例。 当我设置'use_custom = False'时,一切正常,而不是自定义损失不起作用。我做错了什么?

import mxnet as mx
import logging
logging.basicConfig(level='DEBUG')

use_custom = False

mx.random.seed(1)

A =  mx.nd.random.uniform(-1, 1, (5, 1))
B =  mx.nd.random.uniform(-1, 1)

X = mx.nd.random.uniform(-1, 1, (100, 5))
y = mx.nd.dot(X, A) + B

iter = mx.io.NDArrayIter(data=X, label=y, data_name='data', label_name='label', batch_size=20, shuffle=True)

data  = mx.sym.Variable('data')
label = mx.sym.Variable('label')

net = mx.sym.FullyConnected(data, num_hidden=1)
if use_custom:
    net = mx.sym.MakeLoss(mx.sym.square(net - label))
else:
    net = mx.sym.LinearRegressionOutput(net, label=label)

mod = mx.mod.Module(net, label_names=('label',))
mod.fit(iter, num_epoch=50, eval_metric='mse', optimizer='adam')

【问题讨论】:

    标签: mxnet


    【解决方案1】:

    这里回答的问题: https://discuss.mxnet.io/t/cannot-implement-customized-loss-function/797

    您的自定义损失按预期工作,您认为它没有收敛,因为eval_metric 正在使用您的网络的输出(损失)并将其与标签进行比较。在您的情况下,我将使用自定义评估指标,即身份函数。

    mod = mx.mod.Module(net, label_names=['label'])
    identity = mx.metric.CustomMetric(lambda x,y:y, name='mse_id')
    mod.fit(iter, num_epoch=10, eval_metric=identity, optimizer='adam')
    

    这给了你这个:

    INFO:root:Epoch[0] Train-mse_id=0.434285
    INFO:root:Epoch[0] Time cost=0.056
    INFO:root:Epoch[1] Train-mse_id=0.000387
    INFO:root:Epoch[1] Time cost=0.055
    INFO:root:Epoch[2] Train-mse_id=0.000000
    INFO:root:Epoch[2] Time cost=0.055
    INFO:root:Epoch[3] Train-mse_id=0.000000
    INFO:root:Epoch[3] Time cost=0.055
    INFO:root:Epoch[4] Train-mse_id=0.000000
    INFO:root:Epoch[4] Time cost=0.055
    INFO:root:Epoch[5] Train-mse_id=0.000000
    INFO:root:Epoch[5] Time cost=0.056
    INFO:root:Epoch[6] Train-mse_id=0.000000
    INFO:root:Epoch[6] Time cost=0.056
    INFO:root:Epoch[7] Train-mse_id=0.000000
    INFO:root:Epoch[7] Time cost=0.056
    INFO:root:Epoch[8] Train-mse_id=0.000000
    INFO:root:Epoch[8] Time cost=0.056
    INFO:root:Epoch[9] Train-mse_id=0.000000
    INFO:root:Epoch[9] Time cost=0.056
    

    【讨论】:

      猜你喜欢
      • 2018-01-30
      • 1970-01-01
      • 1970-01-01
      • 2020-11-26
      • 2021-02-08
      • 2016-12-07
      • 2018-07-22
      • 1970-01-01
      • 2018-05-26
      相关资源
      最近更新 更多