神经网络-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里面就起作用了。

你可能感兴趣的:(神经网络,神经网络,pytorch)