MXNet自定义目标函数

自定义目标函数是深度学习应用中经常需要的操作。MXNet中可以直接使用Python+Numpy定义新的目标函数,比较方便。下面简单举个例子。

目标

由于手头上的训练集有些样本没有标注(没有标注的label设定为-1),在进行linear regression的时候想去掉这些标注,注意,这里不是去掉样本,只是做back propogation的时候对这些标注的error 返回为0 (即相应返回的gradient为0)。因此需要实现一个自定义的loss layer。

loss layer定义

loss layer的定义包括几个工作:

  1. 继承operator.NumpyOp类
  2. 定义方法:list_argument, list_output。这里由于是loss layer,输入就是data 和label,输出是output。无需改变。
  3. infer_shape 方法:定义label和data数组的shape,代码里有相应的注释。这里读者可能会问,为什么还要定义呢?不是输入的label和data已经有了吗?考虑这样一个问题:对于softmax, 做1000类分类,虽然输入的维度是1000,可是输出的维度是1。而对于1000维的线性回归问题,输入1000,输出也是1000。因此需要在代码里手动定义。
  4. 定义forward和backward方法。这里就是实现目标函数逻辑的部分了。需要注意的是输入参数的含义。下面代码的注释里给出了每个参数具体的说明。
class LinearRegMissingLabel(mx.operator.NumpyOp):
    def __init__(self):
        super(LinearRegMissingLabel, self).__init__(False)

    def 
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值