news 2026/3/1 21:56:23

PyTorch实现二分类

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PyTorch实现二分类

二分类问题的实现方法,核心是把线性回归的 “连续值输出” 改成 “0/1 类别概率输出”。最基础常用的二分类模型基于逻辑回归(Logistic Regression)。

线性回归实现方式:PyTorch实现线性回归-CSDN博客

二分类本质上也是一种回归(Regression)问题,在上述线性回归的基础上修改就可以实现。下面是线性回归与二分类任务的差异:

环节线性回归(回归任务)二分类(分类任务)
输出目标连续数值(如 y=2x 的预测值)0/1 类别概率(0≤P≤1)
核心激活函数无(直接输出线性结果)Sigmoid(把线性输出映射到 0-1)
损失函数MSELoss(均方误差)BCELoss(二元交叉熵损失)
预测逻辑直接取输出值概率 > 0.5 归为 1 类,≤0.5 归为 0 类

1. 准备数据集(Prepare Dataset)

对比线性回归,数据格式还是 Tensor,但标签y_data是0/1 离散值,这是分类任务的核心特征。

import torch # 构造数据集:特征x(学分),标签y(0=不及格,1=及格) # 样本:[1.0], [2.0], [3.0] → 标签:0,0,1 x_data = torch.Tensor([[1.0], [2.0], [3.0]]) y_data = torch.Tensor([[0], [0], [1]])

2. 设计模型(Design model)

class LogisticRegressionModel(torch.nn.Module): def __init__(self): super().__init__() self.linear = torch.nn.Linear(1, 1) def forward(self, x): # 核心:线性输出 + Sigmoid激活 → 映射到0-1概率 y_pred = torch.sigmoid(self.linear(x)) return y_pred model = LogisticRegressionModel()
  • Sigmoid函数公式:
  • forward中增加torch.sigmoid()把线性层的 “任意实数输出” 压缩到0~1 区间,这个值就是 “样本属于 1 类的概率”。

3. 构造损失函数(Construct Loss)

criterion = nn.BCELoss(reduction='sum')
  • BCELoss:二元交叉熵损失,是二分类的专用损失。

关于二元交叉熵损失函数的介绍,参考文章PyTorch_conda-CSDN博客中《nn.BCELoss(二元交叉熵损失)》一节。

4. 构造优化器(Construct Optimizer)

optimizer = torch.optim.SGD(model.parameters(), lr=0.0001)

5. 训练循环(Training Cycle)

for epoch in range(1000): y_pred = model(x_data) # 前向传播(计算预测值) loss = criterion(y_pred, y_data) # 计算损失值 print(epoch, loss.item()) optimizer.zero_grad() # 梯度清零 loss.backward() # 反向传播计算梯度 optimizer.step() # 更新参数

完整实例

import torch import torch.nn as nn x_data = torch.Tensor([[1.0], [2.0], [3.0]]) y_data = torch.Tensor([[0], [0], [1]]) class LogisticRegressionModel(nn.Module): def __init__(self): super().__init__() self.linear = nn.Linear(1, 1) def forward(self, x): return torch.sigmoid(self.linear(x)) model = LogisticRegressionModel() criterion = nn.BCELoss(reduction='sum') optimizer = torch.optim.SGD(model.parameters(), lr=0.01) for epoch in range(10000): y_pred = model(x_data) loss = criterion(y_pred, y_data) if epoch % 1000 == 0: print(f"Epoch: {epoch}, Loss: {loss.item():.4f}") optimizer.zero_grad() loss.backward() optimizer.step() x_test = torch.Tensor([[4.0]]) y_test_pred = model(x_test) print("\n测试结果:") print('y_pred = ', y_test_pred.data) # 查看模型参数 print(f"\n模型权重:{model.linear.weight.item():.6f}") print(f"模型偏置:{model.linear.bias.item():.6f}")
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/19 0:03:31

小程序毕设项目:基于springboot+小程序的高校校园信息交流平台小程序设计与实现(源码+文档,讲解、调试运行,定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/2/16 17:09:54

计算机小程序毕设实战-基于SpringBoot中小学家校通系统的设计与实现springboot+小程序的家校通程序设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/2/20 6:18:43

(100分)- 幻方修复(Java JS Python)

(100分)- 幻方修复(Java & JS & Python) 题目描述 幻方(Magic Square)是一个由1~N,共N个整数构成的N*N矩阵,满足每行、列和对角线上的数字和相等。 上回你已经帮助小明将写错一个数字的幻方进行…

作者头像 李华
网站建设 2026/2/23 11:19:21

STC15F204EA概述

特性:增强型 8051 CPU,1T,单时钟/机器周期,速度比普通8051快6-12倍工作电压:STC15F204EA 系列工作电压:5.5V - 3.8V(5V 单片机)STC15L204EA 系列工作电压:3.6V - 2.4V(3V…

作者头像 李华
网站建设 2026/2/24 1:13:18

计算机小程序毕设实战-基于springboot+小程序的高校生活互助平台小程序基于SpringBoot的高校报修与互助平台小程序【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/2/23 18:27:43

数据产品视频领域:内容理解与智能推荐算法

数据产品视频领域:内容理解与智能推荐算法 关键词:视频内容理解、智能推荐算法、深度学习、计算机视觉、自然语言处理、多模态学习、个性化推荐 摘要:本文深入探讨数据产品视频领域中的内容理解与智能推荐算法。我们将从视频内容理解的技术原理出发,分析如何通过深度学习技…

作者头像 李华