当前位置: 首页 > news >正文

中国城乡住房建设厅网站首页九江市城市建设投资有限公司

中国城乡住房建设厅网站首页,九江市城市建设投资有限公司,网站维护内容,seo是什么部门提示#xff1a;有关loss损失函数详细解读#xff0c;并附源码#xff01;#xff01;#xff01; 文章目录 前言一、F.binary_cross_entropy()函数解读1.函数表达2.函数运用 二、nn.BCELoss()函数解读1.函数表达2.函数运用 三、nn.BCEWithLogitsLoss()函数解读1.函数表达… 提示有关loss损失函数详细解读并附源码 文章目录 前言一、F.binary_cross_entropy()函数解读1.函数表达2.函数运用 二、nn.BCELoss()函数解读1.函数表达2.函数运用 三、nn.BCEWithLogitsLoss()函数解读1.函数表达2.函数运用(logit探索)3.函数运用(pred探索) 四、F.kl_div()函数解读 前言 最近我在构建蒸馏相关模型我重温了一下交叉熵相关内容也使用pytorch相关函数接口调用我将对F.binary_cross_entropy()、nn.BCELoss()与nn.BCEWithLogitsLoss()函数做一个说明同时也简单介绍相对熵的蒸馏F.kl_div()函数做一个介绍。 一、F.binary_cross_entropy()函数解读 1.函数表达 F.binary_cross_entropy(input: Tensor, # 预测输入target: Tensor, # 标签weight: Optional[Tensor] None, # 权重可选项size_average: Optional[bool] None, # 可选项快被弃用了reduce: Optional[bool] None,reduction: str mean, # 默认均值或求和等形式 ) - Tensor:该函数实际是交叉熵运算方式其中input、target与权重有相同维度(batch)其中表示可以是任何维度。同时input为模型预测其每个元素取值范围在[0,1]间。 2.函数运用 假设输入input经过sigmoid或softmax等方式将其值转为[0,1]范围预测target为one-hot标签(也可是教师的软标签形式)其应用代码如下 import torch import torch.nn.functional as F def binary_cross_entropy():input torch.tensor([[0.5, 1.0, 0.8], [0.2, 0.4, 0.6]])# s nn.Sigmoid()# pred s(input)target torch.tensor([[0, 1.0, 0], [0, 0, 1.0]])weight torch.tensor([[0.1, 0.9, 0.1],[0.1, 0.1, 0.9]])output_weight F.binary_cross_entropy(input, target,weightweight) # input取值范围[0,1]output F.binary_cross_entropy(input, target) # input取值范围[0,1]print(预测数据:,input)print(标签数据:,target)print(\nbinary_cross_entropy-有权重:{}\t无权重{}\n.format(output_weight, output)) 结果如下 预测数据: tensor([[0.5000, 1.0000, 0.8000],[0.2000, 0.4000, 0.6000]]) 标签数据: tensor([[0., 1., 0.],[0., 0., 1.]])binary_cross_entropy-有权重:0.12723307311534882 无权重0.5912299752235413 二、nn.BCELoss()函数解读 1.函数表达 torch.nn.BCELoss(weightNone, size_averageNone, reduceNone, reductionmean) 参数说明 weight 用于样本加权的权重张量。如果给定则必须是一维张量大小等于输入张量的大小。默认值为 None。 reduction 指定如何计算损失值。可选值为 ‘none’、‘mean’ 或 ‘sum’。默认值为 ‘mean’。 此为类是对F.binary_cross_entropy()函数的调用也是交叉熵运算方式其中input、target与权重有相同维度(batch)其中表示可以是任何维度。同时input为模型预测其每个元素取值范围在[0,1]间。 2.函数运用 假设输入input经过sigmoid或softmax等方式将其值转为[0,1]范围预测target为one-hot标签(也可是教师的软标签形式)其应用代码如下 import torch import torch.nn.functional as F def bceloss():s nn.Sigmoid() # 输出是pred torch.tensor([[0.5, 1.0, 0.8], [0.2, 0.4, 0.6]])# pred s(pred) # 一般会经过sigmoid或softmax方式将其预测转为[0,1]范围的值target torch.tensor([[0, 1.0, 0], [0, 0, 1.0]])# nn.BCELoss输入的pred与target的形状必须相同实际是交叉熵计算target没有限制bce nn.BCELoss(reductionmean) # size_average参数将被遗弃使用reduction决定后续操作有mean sumb bce(pred, target) # pred元素取值范围是[0,1]之间否则会报错print(预测数据:,pred)print(标签数据:,target)print(\nbceloss:{}\n.format(b)) 结果如下 预测数据: tensor([[0.5000, 1.0000, 0.8000],[0.2000, 0.4000, 0.6000]]) 标签数据: tensor([[0., 1., 0.],[0., 0., 1.]])bceloss:0.5912299752235413可以看出该函数与上面无权重运行结果一致实际是对上一个函数进行了类包装其计算方式和上面函数完全一样。 三、nn.BCEWithLogitsLoss()函数解读 1.函数表达 torch.nn.BCEWithLogitsLoss(weightNone, size_averageNone, reduceNone, reductionmean, pos_weightNone) 参数说明 weight用于对每个样本的损失值进行加权。默认值为 None。 reduction指定如何对每个 batch 的损失值进行降维。可选值为 ‘none’、‘mean’ 和 ‘sum’。默认值为 ‘mean’。 pos_weight用于对正样本的损失值进行加权。可以用于处理样本不平衡的问题。例如如果正样本比负样本少很多可以设置 pos_weight 为一个较大的值以提高正样本的权重。默认值为 None。 2.函数运用(logit探索) 假设输入input经过sigmoid或softmax等方式将其值转为[0,1]范围预测target为one-hot标签(也可是教师的软标签形式)其应用代码如下 import torch import torch.nn.functional as F def bce_logit_loss():s nn.Sigmoid() # 输出是pred torch.tensor([[0.5, 1.0, 0.8], [0.2, 0.4, 0.6]])target torch.tensor([[0, 1.0, 0], [0, 0, 1.0]])bce_logit nn.BCEWithLogitsLoss(reductionmean)b_logit bce_logit(pred, target) # pred元素取值范围是[0,1]之间否则会报错pred s(pred)# nn.BCELoss输入的pred与target的形状必须相同实际是交叉熵计算target没有限制bce nn.BCELoss(reductionmean) # size_average参数将被遗弃使用reduction决定后续操作有mean sumb bce(pred, target) # pred元素取值范围是[0,1]之间否则会报错print(预测数据:, pred)print(标签数据:, target)print(\nbceloss:{}\t bce_with_logit:{} \n.format(b, b_logit)) 结果如下 预测数据: tensor([[0.6225, 0.7311, 0.6900],[0.5498, 0.5987, 0.6457]]) 标签数据: tensor([[0., 1., 0.],[0., 0., 1.]])bceloss:0.7678468823432922 bce_with_logit:0.7678468823432922可以看出nn.BCELoss只需多一个nn.Sigmoid()得到的结果和nn.BCEWithLogitsLoss是一致的说明该类只是多了一个logit过程。 3.函数运用(pred探索) import torch import torch.nn.functional as F def bce_logit_loss():pred torch.tensor([[5, 1, 8.0], [2, 4, 6.0]])target torch.tensor([[0, 1.0, 0], [0, 0, 1.0]])bce_logit nn.BCEWithLogitsLoss(reductionmean)b_logit bce_logit(pred, target) # pred元素取值范围是[0,1]之间否则会报错print(预测数据:, pred)print(标签数据:, target)print( bce_with_logit:{} \n.format( b_logit)) 结果如下 预测数据: tensor([[5., 1., 8.],[2., 4., 6.]]) 标签数据: tensor([[0., 1., 0.],[0., 0., 1.]])bce_with_logit:3.2446444034576416 可以看出nn.BCEWithLogitsLoss的输入是可以为实数它先进行sigmoid处理将其输入变为[0,1]范围在进行交叉熵运算然上面nn.BCELoss与F.binary_cross_entropy则不行。 四、F.kl_div()函数解读 该函数为蒸馏模型使用的函数我直接给出示列如下 def kl_func():logits torch.tensor([[0.5, 1.0, 0.8], [0.2, 0.4, 0.6]])probs torch.nn.functional.softmax(logits, dim1) # 预测学生模型target_probs torch.tensor([[0.3, 0.4, 0.3], [0.1, 0.5, 0.4]]) # 教师模型loss F.kl_div(torch.log(probs), target_probs, reductionbatchmean)print(模型输出数据:, logits)print(预测数据:,probs)print(标签数据:,target_probs)print(\nkl_loss:{}\n.format(loss)) 输出结果 模型输出数据: tensor([[0.5000, 1.0000, 0.8000],[0.2000, 0.4000, 0.6000]]) 预测数据: tensor([[0.2501, 0.4123, 0.3376],[0.2693, 0.3289, 0.4018]]) 标签数据: tensor([[0.3000, 0.4000, 0.3000],[0.1000, 0.5000, 0.4000]])kl_loss:0.057796258479356766 参考文章点击这里
http://wiki.neutronadmin.com/news/422163/

相关文章:

  • 上海著名网站设计公司wordpress sozo
  • wordpress 中国温州seo网站建设
  • 最专业的做网站公司有哪些安平网站建设优化
  • 江门网站程序开发制作上海网络推广优化公司
  • 企业网站源码进一品资源网考网站开发工程师
  • 我想创业做网站网站的按钮怎么做
  • 郑州整站网站优化凡科轻站小程序制作平台
  • 坪地网站建设信息wordpress 仪表盘慢
  • python做网站有什么优势国家企业信息公示(全国)
  • 网站开发商城wordpress禁用顶部
  • 做网站与网店运营电子外贸网站建设
  • 网站代理最快最干净有哪些招聘网站
  • 别人带做的网站关闭了权限咋办绣花图案设计网站
  • 网站网页建设实训心得体会小红书的网络营销模式
  • 实验教学网站的建设研究网站建设客源开发
  • 手机app网站模板下载html成品网站
  • 与别人相比自己网站建设优势空壳网站清理通知
  • 怎么做微帮网站旧宫做网站的公司
  • 做物流的都是上什么网站苏州市吴江区住房和城乡建设局网站
  • 四川住房和城乡建设厅网站不能进入网站建设的工作职责
  • 网站上传百度多久收录seo优化深圳
  • 网站营销 海外阳江招聘网站哪里最好找工作
  • 建设个网站广州外贸是做什么的 怎么做
  • 网站分页样式县直门户网站建设管理
  • 琼海做球网站wordpress重新排列文章id
  • 电商网站规划与设计论文网站项目申报书建设规模
  • 网站系统介绍山东东营网络科技有限公司
  • 网站后台下载图片推广排名
  • 怎样更新网站免费论坛网站建设
  • wordpress 做企业网站免费发布信息的软件