系列文章目录
Pytorch基础篇
01-PyTorch新手必看:张量是什么?5 分钟教你快速创建张量!
02-张量运算真简单!PyTorch 数值计算操作完全指南
03-Numpy 还是 PyTorch?张量与 Numpy 的神奇转换技巧
04-揭秘数据处理神器:PyTorch 张量拼接与拆分实用技巧
05-深度学习从索引开始:PyTorch 张量索引与切片最全解析
06-张量形状任意改!PyTorch reshape、transpose 操作超详细教程
07-深入解读 PyTorch 张量运算:6 大核心函数全面解析,代码示例一步到位!
08-自动微分到底有多强?PyTorch 自动求导机制深度解析
Pytorch实战篇
09-从零手写线性回归模型:PyTorch 实现深度学习入门教程
10-PyTorch 框架实现线性回归:从数据预处理到模型训练全流程
11-PyTorch 框架实现逻辑回归:从数据预处理到模型训练全流程
12-PyTorch 框架实现多层感知机(MLP):手写数字分类全流程详解
文章目录
前言
在机器学习的学习过程中,我们接触过 线性回归 模型,并使用过如 Scikit-learn 这样的工具来快速实现。但在本文中,将深入理解线性回归的核心思想,并使用 PyTorch 从零开始手动实现一个线性回归模型。这包括:
- 数据集的构建;
- 假设函数的定义;
- 损失函数的设计;
- 梯度下降优化方法的实现;
- 模型训练和损失变化的可视化。
一、构建数据集
线性回归需要一个简单的线性数据集,我们将通过sklearn.datasets.make_regression
方法生成。
1.1 示例代码
import torch
from sklearn.datasets import make_regression
import matplotlib.pyplot as plt
import random
def create_dataset():
"""
使用 make_regression 生成线性回归数据集,并转换为 PyTorch 张量。
"""
x, y, coef = make_regression(
n_samples=120, # 样本数量,即数据点个数
n_features=1, # 每个样本只有一个特征
noise=15, # 添加噪声,模拟真实场景
coef=True, # 是否返回生成数据的真实系数
bias=12.0, # 偏置值,即 y = coef * x + bias
random_state=42 # 随机种子,保证结果一致性
)
# 转换为 PyTorch 张量
x = torch.tensor(x, dtype=torch.float32) # 输入特征张量
y = torch.tensor(y, dtype=torch.float32).reshape(-1, 1) # 输出标签张量转换为二维
return x, y, coef # 返回输入特征张量、输出标签张量和真实系数
# 数据加载器,用于批量获取数据
def data_loader(x, y, batch_size):
"""
数据加载器,按批次随机提取训练数据。
参数:
x: 输入特征张量
y: 输出标签张量
batch_size: 批量大小
"""
data_len = len(y) # 数据集长度
indices = list(range(data_len)) # 创建索引列表
random.shuffle(indices) # 随机打乱索引,保证数据随机性
num_batches = data_len // batch_size # 计算批次数
for i in range(num_batches): # 遍历每个批次
start = i * batch_size # 当前批次起始索引
end = start + batch_size # 当前批次结束索引
# 提取当前批次的数据
batch_x = x[indices[start:end]] # 当前批次输入
batch_y = y[indices[start:end]] # 当前批次输出
yield batch_x, batch_y # 返回当前批次数据
1.2 示例输出
运行 create_dataset
后的数据分布为线性趋势,同时包含噪声点。例如:
x:
tensor([[-1.3282],
[ 0.1941],
[ 0.8944],
...])
y:
tensor([-40.2345, 15.2934, 45.1282, ...])
coef:
tensor([35.0])
二、构建假设函数
线性回归的假设函数可以表示为:
y = w ⋅ x + b y ^ =w⋅x+b y=w⋅x+b
其中,( w ) 是权重,( b ) 是偏置。使用 PyTorch 张量定义这些参数。
2.1 示例代码
# 模型参数初始化
w = torch.tensor(0.5, requires_grad