torch.nn损失函数总结

如果reduction='sum',即对所有元素求和,例如shape=(2,2,3,3),就是在mean下求得的值 * 36.

class torch.nn.L1Loss(size_average=None, reduce=None, reduction='mean')

\left |x_{i,j}-y_{i,j} \right |

class torch.nn.MSELoss(size_average=None, reduce=None, reduction='mean')

\left ( x_{i,j}-y_{i,j} \right )^{2}

class torch.nn.SmoothL1Loss(size_average=None, reduce=None, reduction='mean')

0.5\left ( x_{i,j}-y_{i,j} \right )^{2}   , if \left |x_{i,j}-y_{i,j} \right | < 1

 \left |x_{i,j}-y_{i,j} \right | - 0.5  ,otherwise

----------------------------------------------------分割线

class torch.nn.CrossEntropyLoss(weight=None, size_average=None, ignore_index=-100, reduce=None, reduction='mean')

weight应该是一维张量,为每个类分配权重。 当您的训练集不平衡时,此功能特别有用。

 这里假设一共有[0,1,2...j,...n-1] n 个类,class即是标签 y 所属的类别

手动计算过程如下(3个类,标签y1,y2,y3分别为类0,1,1):

​
x = torch.rand((3,3))
y = torch.tensor([0,1,1])

softmax = nn.Softmax(dim=1)
x_softmax = softmax(x)
x_log = torch.log(x_softmax)

>>>tensor([[-0.9632, -1.1211, -1.2297],
        [-1.0468, -1.2794, -0.9923],
        [-1.0947, -0.9512, -1.2762]])

​loss_func = nn.CrossEntropyLoss()
loss_func(x,y)

>>>tensor(1.0646)

然后再按 y 从 x_log 中取值,去掉负号,再求和取平均值,结果就是1.0646

class torch.nn.NLLLoss(weight=None, size_average=None, ignore_index=-100, reduce=None, reduction='mean')

nn.NLLLoss输入是一个对数概率向量和一个目标标签,它与nn.CrossEntropyLoss的关系可以描述为:softmax(x)+log(x)+nn.NLLLoss====>nn.CrossEntropyLoss

class torch.nn.BCELoss(weight=None, size_average=None, reduce=None, reduction='mean')
input = torch.randn(3)
target = torch.tensor([0.,1.,0.])

m = nn.Sigmoid()
loss = nn.BCELoss()

output = loss(m(input), target)

 

Sigmoid函数可以用来解决多标签问题,Softmax函数用来解决单标签问题。也就是说,这里的input,是一个二分类多标签数据,也就是含有3个标签。

class torch.nn.BCEWithLogitsLoss(weight=None, size_average=None, reduce=None, reduction='mean', pos_weight=None)

本质上和nn.BCELoss()没有区别,只是在BCELoss上加了个logits函数(也就是sigmoid函数)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
torch.nn.Linear函数是PyTorch中的一个线性变换函数。它接受三个参数:in_features表示输入的特征数,out_features表示输出的特征数,bias是一个布尔值,表示是否使用偏置项。该函数将输入特征与权重矩阵相乘,并可选择是否加上偏置项,从而进行线性变换。 在nn.Linear函数中,权重矩阵的形状是(out_features, in_features),而输入特征的形状是(batch_size, in_features)。当输入特征与权重矩阵相乘时,可以使用torch.t对nn.Linear的权重矩阵进行转置,以便进行矩阵乘法操作。这样得到的输出维度将是(batch_size, out_features)。torch.mm函数可以用来执行矩阵相乘的操作。 因此,torch.nn.Linear函数可以用来构建神经网络的全连接层,将输入特征与权重矩阵相乘,并添加偏置项,得到线性变换后的输出。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [torch.nn.Linear()函数](https://blog.csdn.net/qq_35037684/article/details/121624295)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [【Pytorch基础】torch.nn.Linear()函数](https://blog.csdn.net/zfhsfdhdfajhsr/article/details/115228920)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值