神经网络-pytorch-自定义损失函数

首先要明确的是pytorch的损失函数是可以自制定的,但是由于数据回传等等因素(其实我也不知道具体机制)总之就是只改变loss的值可能无法产生作用。

比如原来的loss定义为:

loss=F.nll_loss(logsoft_prob,formatted_label_x)

如果你直接在上面加上一个1,或者是随便什么的算式,那样是没有效果的,整个网络的预测结果没有丝毫变化,参数更新值也和加之前一模一样。

在这里,一般会将神经网络某一层的参数计算一个f1值或者f2值来对网络进行一个限制。比如想让每一个特征起的作用尽量稀疏。

这个时候首先要读出网络的参数,要知道我们需要调整的那一层有什么参数,叫什么名字

需要用到 **metric_nn.state_dict()这个函数。我们知道这个函数的输出是一个字典,字典的keys是网络的参数名字,字典的values就是参数的值,那么我们只需要用model_name.state_dict().keys()**就可以得到网络每一层参数的名字啦。

得知名字之后就可以直接用“.”来一层层找到参数值,什么意思呢?如下:

L1_2=torch.norm(metric_nn.gnn_obj.layer_last.fc.weight,p=1)

这个是计算参数矩阵的L1范数。

然后直接加到LOSS里面就起作用了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值