PyTorch实现二分类

📅 发布时间:2026/7/10 2:32:34 👁️ 浏览次数:
PyTorch实现二分类
二分类问题的实现方法核心是把线性回归的 “连续值输出” 改成 “0/1 类别概率输出”。最基础常用的二分类模型基于逻辑回归Logistic Regression。线性回归实现方式PyTorch实现线性回归-CSDN博客二分类本质上也是一种回归Regression问题在上述线性回归的基础上修改就可以实现。下面是线性回归与二分类任务的差异环节线性回归回归任务二分类分类任务输出目标连续数值如 y2x 的预测值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学分标签y0不及格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 modelclass 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 Losscriterion nn.BCELoss(reductionsum)BCELoss二元交叉熵损失是二分类的专用损失。关于二元交叉熵损失函数的介绍参考文章PyTorch_conda-CSDN博客中《nn.BCELoss二元交叉熵损失》一节。4. 构造优化器Construct Optimizeroptimizer torch.optim.SGD(model.parameters(), lr0.0001)5. 训练循环Training Cyclefor 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(reductionsum) optimizer torch.optim.SGD(model.parameters(), lr0.01) for epoch in range(10000): y_pred model(x_data) loss criterion(y_pred, y_data) if epoch % 1000 0: print(fEpoch: {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})