当前位置: 首页> 教育> 就业 > 线性回归Pytorch方法

线性回归Pytorch方法

时间:2025/7/11 11:19:34来源:https://blog.csdn.net/sweet_Mary/article/details/140999317 浏览次数:0次

借助 PyTorch 实现深度神经网络 - 线性回归 PyTorch 方法 - 第 3 周 | Coursera

随机梯度下降和数据加载器

在每个epoch中,使用一个样本进行更新的方法称为随机梯度下降,而使用所有样本进行更新的方法称为批量梯度下降。

随机梯度下降:

5e7b928f8616432ebf370ca1ccc40b50.png

随机梯度下降的问题:近似损失快速波动

a3c9b66757534c63b9d2a77fe8e3b8a3.png

Pytorch实现:

e68fb7b7093b47e1a87dffc34615685b.png

107f68208caa41149aecbabdd362ba49.png

aba98669622a42159a84f5270ca08477.png

import torch
from torch.utils.data import Dataset, DataLoader
import torch.nn as nn# 定义数据集类
class Data(Dataset):def __init__(self):self.x = torch.arange(-3, 3, 0.1).view(-1, 1)self.y = 1 * self.x - 1 + 0.1 * torch.randn(self.x.size())self.len = self.x.shape[0]def __getitem__(self, index):return self.x[index], self.y[index]def __len__(self):return self.len# 初始化数据和数据加载器
dataset = Data()
trainloader = DataLoader(dataset=dataset, batch_size=1, shuffle=True)# 定义模型参数
w = torch.tensor(-12.0, requires_grad=True)
b = torch.tensor(-10.0, requires_grad=True)
lr = 0.01  # 学习率
criterion = nn.MSELoss()# 定义前向传播函数
def forward(x):return w * x + b# 训练模型并记录总损失
LOSS = []def my_train_model(epochs):for epoch in range(epochs):total_loss = 0  # 每个epoch的总损失for x, y in trainloader:yhat = forward(x)loss = criterion(yhat, y)total_loss += loss.item()loss.backward()with torch.no_grad():w -= lr * w.gradb -= lr * b.gradw.grad.zero_()b.grad.zero_()LOSS.append(total_loss)print(f"Epoch {epoch + 1}/{epochs}, Loss: {total_loss}")# 训练模型
my_train_model(10)

小批量梯度下降

允许处理更大的数据集(无法容纳在内存中)

fc2f18325a364722aafa2330918b2e9b.png

077f415ad6c74f2f96f6b3066de051c7.png

总结:

c4cce25ad6bb4013a0f3b501ba10df53.png

37e1d5a5b10544ff9f19978956bd7343.png

import torch
from torch.utils.data import Dataset, DataLoader
import torch.nn as nn# 定义数据集类
class Data(Dataset):def __init__(self):self.x = torch.arange(-3, 3, 0.1).view(-1, 1)self.y = 1 * self.x - 1 + 0.1 * torch.randn(self.x.size())self.len = self.x.shape[0]def __getitem__(self, index):return self.x[index], self.y[index]def __len__(self):return self.len# 初始化数据和数据加载器
dataset = Data()
trainloader = DataLoader(dataset=dataset, batch_size=10, shuffle=True)# 定义模型参数
w = torch.tensor(-15.0, requires_grad=True)
b = torch.tensor(-10.0, requires_grad=True)
lr = 0.1  # 学习率
criterion = nn.MSELoss()# 定义前向传播函数
def forward(x):return w * x + b# 训练模型并记录总损失
LOSS_MINI20 = []def train_model_Mini20(epochs):for epoch in range(epochs):total_loss = 0  # 每个epoch的总损失for x, y in trainloader:yhat = forward(x)loss = criterion(yhat, y)total_loss += loss.item()loss.backward()with torch.no_grad():w -= lr * w.gradb -= lr * b.gradw.grad.zero_()b.grad.zero_()LOSS_MINI20.append(total_loss)print(f"Epoch {epoch + 1}/{epochs}, Loss: {total_loss}")# 训练模型
train_model_Mini20(10)

Pytorch中的优化

替换criterion函数

51a203ee52aa487f95fd53cff792e327.png

0e81977b2ae4481c9b3e956c83e51d89.png

bcec77642481465f8d2189f28e21a9b2.png

563fcd10e3c442b8a1132bf937ecc739.png

17f1b3af82254cabaa0000ad604a2e16.png

b862b827bd554d6eaf7f1faab029f0e8.png

训练、验证、测试

参数:w,b

超参数:lr、batch_size

使用验证数据集来决定超参数大小

014a64f0226c40dbaa8f5a663e21a231.png

用Pytorch实现:

ddc70a0bc27f4ee49b6fa13772637c88.png

40450e3c5a76475595631b9f6f71b2d0.png

76825456741a4e949a88efbab3097f09.png

512dcf3ede94417d8783bb9e0d1192b8.png

有点网格搜索优化的感觉

987aa961bb9f41b2af1a66b6d36df7c5.png

68578e669b51423f91417b1ab1600d71.png

01c222cf3cec4553901dd2966dff263c.png

 

关键字:线性回归Pytorch方法

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: