pytorch 损失函数(nn.BCELoss 和 nn.CrossEntropyLoss)(思考多标签分类问题)
2024-08-31 00:24:22
一、BCELoss 二分类损失函数
输入维度为(n, ), 输出维度为(n, )
如果说要预测二分类值为1的概率,则建议用该函数!
输入比如是3维,则每一个应该是在0——1区间内(随意通常配合sigmoid函数使用),举例如下:
import torch
import torch.nn as nn
m = nn.Sigmoid()
loss = nn.BCELoss()
input = torch.randn(3,requires_grad=True)
target = torch.empty(3).random_(2)
output = loss(m(input), target)
output.backward() input,target,output 返回值:
(tensor([-0.8728, 0.3632, -0.0547], requires_grad=True),
tensor([1., 0., 0.]),
tensor(0.9264, grad_fn=<BinaryCrossEntropyBackward>)) m(input)结果为:
tensor([0.2947, 0.5898, 0.4863]) 计算output = (1 * ln 0.2947+(1-1)*ln(1-0.2947) + 0*ln0.5898 + (1-0)*ln(1-0.5898) + 0*ln0.4863 + (1-0)*ln(1-0.4863)) / 3 = 0.9264
二、nn.CrossEntropyLoss 交叉熵损失函数
输入维度(batch_size, feature_dim)
输出维度 (batch_size, 1)
X_input = torch.tensor[ [2.8883, 0.1760, 1.0774],
[1.1216, -0.0562, 0.0660],
[-1.3939, -0.0967, 0.5853]]
y_target = torch.tensor([1,2,0])
loss_func = nn.CrossEntropyLoss()
loss = loss_func(X_input, y_target)
计算流程:第一,x先softmax再log,得到x_hat 第二,y转0-1编码[1,2,0] 转[[0,1,0], [0,0,1], [1,0,0]] 再与x_hat相乘,取负取平均值
思考问题:多标签的分类任务中,怎么使用损失函数呢,是拆分是多个二分类问题呢,还是不用拆分直接用BCE呢(https://blog.csdn.net/rosefun96/article/details/88058708,参考:BCE 可以应用到多标签的分类任务中)?有什么区别呢?
最新文章
- jQuery.grep()
- 理解 Nova 架构 - 每天5分钟玩转 OpenStack(23)
- 【终极解决方案】为应用程序池“XXX”提供服务的进程在与 Windows Process Activation Service 通信时出现严重错误。该进程 ID 为“XXXX”。数据字段包含错误号。
- iOS 中的frame,bounds,center,transform关联
- Failed to start component [StandardEngine[Catalina].StandardHost[localhost....
- cocos2d-x一些核心概念截杀
- 完美解决移动Web小于12px文字居中的问题
- IOS基础 Day-1手动内存管理
- chrome jsonView插件安装
- SQL Server调优系列基础篇 - 联合运算符总
- PCB成型製程介紹
- svn数据仓库配置,权限配置
- Web Service进阶(六)SOAPBinding绑定方式异常 is not found. Have you run APT to generate them
- 开发自己的 chart - 每天5分钟玩转 Docker 容器技术(167)
- 【Python】创建xml文档
- 配置B类内网 和 配置A类内网
- mysql 禁制远程连接
- 设置 TIM3_CH2 的 PWM 模式,使能 TIM3 的 CH2 输出
- Android 全局异常处理(三)
- eclipse中设置在编译运行项目之前自动保存修改的文件