pytorch_BCELoss的reduction参数理解

BCELoss【错了跟我讲,我可以改,一起学】

用于二分类问题,计算loss值,与sigmoid函数一起使用(就是逻辑回归的那个公式,线性外面套一个sigmoid函数)

参考文档

pytorch-BCELoss

理解

看它的参数说明大概能知道:

参数

  • weight张量*,*可选)–对每个批次元素的损失赋予的手动重新缩放重量。如果给定,则必须是大小为nbatch的张量。
  • size_averagebool*,*可选)–已弃用(请参阅reduction)。默认情况下,损失是批次中每个损失元素的平均数。请注意,对于某些损失,每个样本有多个元素。如果该字段size_average 设置为False,则每个小批量的损失总和。何时reduce被忽略False。默认:True
  • reducebool*,*可选)–不推荐使用(请参阅reduction)。默认情况下,根据,对每个小批量的损失进行平均或求和size_average。当reduce为is时False,则返回每批元素的损失,然后忽略size_average。默认:True
  • reduction字符串*,*可选)–指定要应用于输出的减少量: 'none'| 'mean'| 'sum''none':不应用缩减, 'mean':输出的总和除以输出中元素的数量,'sum':输出的总和。注意:size_averagereduce正在弃用的过程中,同时,指定这两个args中的任何一个将覆盖reduction。默认:'mean'

理解:我们一般只用reduction这个参数,有两个选择:

  • 'mean':输出的总和除以输出中元素的数量 【以batch、迭代次数为单位进行一次计算】

  • 'sum':输出的总和 【以单位样本个体进行一次计算】

我们需要查看其loss,一般在一个epoch中,要么每个batch输出一次,要么隔n个batch输出一次,因此,

如果使用mean(默认为mean),表示已经做了均值处理,只需要total_loss除以n(迭代次数)就可以;

如果使用sum,表示没有除以该batch中的样本数,则需要total_loss除以(n*batch_size)【最后一下如果不能整除,自然也就不会进行这一步的total_loss转loss计算】

代码如下:

 total_loss += loss.item()
 if i % 3 == 0:
 	# print("len(trainLoader):", len(trainLoader))
 	# print("len(x)", len(x))
 	print(f'[{time_since(start)}] Epoch {epoch} ', end='')
 	print(f'[{i * len(x[0])}/{len(trainSet)}] ', end='')
 	print(f'loss = {total_loss / (i * len(x[0]))} ', end='')
 	print(f'loss = {total_loss / (i)} ', end='')
 	print(f'[{total_loss} / {(i )}]')
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值