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 离散值,这是分类任务的核心特征。

python 复制代码
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)

python 复制代码
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)

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

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

4. 构造优化器(Construct Optimizer)

python 复制代码
optimizer = torch.optim.SGD(model.parameters(), lr=0.0001) 

5. 训练循环(Training Cycle)

python 复制代码
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()  # 更新参数

完整代码实例

python 复制代码
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}")
相关推荐
嘿嘿-663 分钟前
GPT-6.1 Sol 实战:做一个可交互的 3D 汽车展厅
人工智能·gpt·3d·chatgpt·汽车
AI你一生一世4 分钟前
当广告采集器成为大模型的“眼睛“:跨站上下文注入的架构与代价
人工智能·架构·大模型·rag·隐私安全·上下文注入·跨站追踪
数字化顾问8 分钟前
(136页PPT)BCGIDG资本中国某省市场Geneva项目商业尽职调查项目报告(附下载方式)
大数据·人工智能
故七月12 分钟前
GEO 工程实践:企业官网结构化改造,提升大模型实体采信度
大数据·人工智能·geo
释厄62318 分钟前
物理发展史·量子力学=节点2·牛顿力学=节点3·宇宙的语言算法AI
人工智能·算法·microsoft
乃嘿仔23 分钟前
AI 热点日报 · 2026-10-01
开发语言·人工智能·php
AAASilverwolf24 分钟前
GPT-6 Sol 与 Luna 上线:Astra 的能力下放,价格却降了 50%?
人工智能·gpt·api
欣欣之王来了25 分钟前
AI合规专项:AI自动化决策的合规管控要点
运维·人工智能·自动化
科技峰行者26 分钟前
Bedrock AgentCore在亚马逊云科技中国区域正式可用,助力企业加速AI Agent规模化部署
人工智能·科技·agent·亚马逊·亚马逊云科技
海盗123437 分钟前
微软技术日报 2026-10-01:VS Code 1.140 让模型互相挑错,EWS 今天起关停
人工智能·驱动开发·microsoft·机器人·aigc