线性回归Pytorch方法

news2024/11/15 16:28:48

借助 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.grad
                b -= lr * b.grad
                w.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.grad
                b -= lr * b.grad
                w.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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1996352.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第五代数字产业园入驻西安,西安国际数字影像产业园究竟能带来哪些颠覆性变革?

西安,这座承载着千年历史文化底蕴的古老城市,在时代的洪流中不断焕发出新的生机与活力。如今,西安第五代数字产业园入驻西安,犹如一颗璀璨的新星在这片土地上冉冉升起,为这座城市的发展注入了强大的动力。而在这一重大…

AFSim 仿真系统---- 通信、传感器与干扰系统方程

概述 本文档旨在描述在WSF中对象之间交互所使用的方程和算法。这包括: 传感器交互通信交互干扰(干扰)交互 常见无线电频率方程 WSF使用一套通用类来封装涉及无线电频率(RF)交互的组件(实际上&#xff0…

基于B/S模式的JSP二手车交易网站

你好,我是计算机专业的学生,专注于Web开发。希望我的论文能够为您提供一些有价值的信息。 开发语言:Java 数据库:MySQL 技术:JSP技术 工具:ECLIPSE、Tomcat 系统展示 首页 用户界面 管理员界面 汽车评…

新加坡服务器延迟大吗?如何进行优化

新加坡服务器延迟大吗?新加坡服务器的延迟通常在全国平均延迟111ms左右,其中移动网络约为90ms,联通网络106ms,电信网络最低约为85ms。为了进行优化,一般可以采取使用CDN、优化路由线路、增加带宽和服务器升级等方法。 …

VBA高级应用30例应用3在Excel中的ListObject对象:创建表

《VBA高级应用30例》(版权10178985),是我推出的第十套教程,教程是专门针对高级学员在学习VBA过程中提高路途上的案例展开,这套教程案例与理论结合,紧贴“实战”,并做“战术总结”,以…

Linux 内核源码分析---简单文件系统

顺序文件 debugfs 文件系统 允许只用几个函数调用,就实现一个双向的调试接口。 小的文件系统中的文件,通常用户层是 从头到尾顺序读取 的,其内容可能是遍历一些数据项创建的。 kprobe 机制包含了到上述 debugfs文件系统 的一个接口。一个顺…

【模电笔记】——集成运算放大电路

tips:本章节的笔记已经打包到word文档里啦,建议大家下载文章顶部资源(有时看不到是在审核中,等等就能下载了。手机端下载后里面的插图可能会乱,建议电脑下载,兼容性更好且易于观看),…

利用学校资源访问scientdirect等国外数据库

就直接点view pdf这样的下载按钮,会让你输入组织,搜索找到学校的名字,接下来可以能会要求输入学校邮箱或者其他身份认证信息,最后就可以享受学校已经出过钱买的服务啦!如果不用那么你每个学期大几千的学费简直是暴殄天…

定制你的项目工作流:最适合的文档管理解决方案

国内外主流的10款项目文档管理软件对比:PingCode、Worktile、Teambition、Tapd、Tower、Confluence、Notion、Dropbox Paper、Quip、Basecamp。 在面对项目管理的复杂性时,选择合适的文档管理工具可以显著提高效率和团队协作。许多团队在文档管理上遭遇混…

灰度宣布推出SUI加密投资信托基金

灰度,这家推出受欢迎的BTC和ETH交易所交易基金(ETF)的投资公司,于8月7日宣布将开始提供两种新的加密基金Grayscale Sui Trust和Grayscale Bittensor Trust,这些基金投资于Layer-1区块链Sui(SUI)…

RTT-网络组件-AT命令-未完成

AT指令文档 调用树 at_client_init();at_client_para_init();client_parser();struct at_client {rt_device_t device;at_status_t status;char end_sign;char *send_buf;/* The maximum supported send cmd length */rt_size_t send_bufsz;/* The length of last cmd */rt_si…

Prometheus+Grafana-2-Linux监控-四种指标类型

一、概念 1.时间序列 安装完成后prometheus会暴露一个/metrics的HTTP服务,默认会加上/metrics,Prometheus就会采集这里面的样本数据。 样本 ​ 样本数据会以时间序列的方式保存在内存数据库中,并且定时保存到硬盘上,时间…

CloudCompare—点云切片

文章目录 一、整体功能展示1、必要参数2、其他选项二、代码实现1、提取平面上的包络线2、将点投影到二维平面上3、提取二维凸包三、算法原理参考资料一、整体功能展示 整个点云切片的步骤如下动图所示: 激活点云后,选择切片功能(小立方盒),在点云视图中显示工具栏框,工具…

Javascript常见算法(每日两个)

合并两个有序链表 在JavaScript中,合并两个有序链表通常指的是将两个已经按照某种顺序(如升序或降序)排列的链表合并成一个新的有序链表。由于JavaScript本身不直接支持链表数据结构,我们通常会用对象或数组来模拟链表的行为。但…

【大模型从入门到精通15】openAI API 构建和评估大型语言模型(LLM)应用3

这里写目录标题 设置评估前的准备工作先决条件获取LLM响应 根据评估标准评估响应构建详细的评估标准评估过程示例评估 设置评估前的准备工作 先决条件 在开始评估过程之前,请确保必要的工具和配置已经到位: import os import openai from dotenv impo…

数据结构课程设计:航班订票系统的设计与实现

目录 1 系统功能及要求 2 系统功能框架 3 详细设计 3.1 录入航班信息模块 3.2 客户订票模块 3.3 客户退票模块 3.4 航班查询模块 3.5 订单查询模块 3.6 航班修改模块 参考文献 1 系统功能及要求 (1)录入信息。可以录入航班信息情况,数据存储在一个数据文件中;可以…

靓图!多点创新!CEEMDAN-Kmeans-VMD-CNN-LSTM-Attention双重分解+卷积长短期+注意力多元时间序列预测

靓图!多点创新!CEEMDAN-Kmeans-VMD-CNN-LSTM-Attention双重分解卷积长短期注意力多元时间序列预测 目录 靓图!多点创新!CEEMDAN-Kmeans-VMD-CNN-LSTM-Attention双重分解卷积长短期注意力多元时间序列预测效果一览基本介绍程序设计…

了解babel的作用、原理、基本使用,为什么有babel,以及在webpack中的babel-loader

一、为什么有babel? babel是一个工具链,如今大多数的浏览器都支持es6的语法和特性,但难免有些旧版本的浏览器是不支持的,为了兼容这些旧版本的浏览器,有了babel这一个 JavaScript 编译器。它能为我们做一些事情&#…

Linux中针对文件权限的解析

1.文件权限详细解析: -rw-r--r--. 1 root root 114 4月 10 16:32 100.txt 1)-rw-r--r--. 总共11位 第一个“-”和最后一个“.”不用去管,剩下 rw- r-- r-- 属主 属组 其他人 u g o 第一个是“-”表示普通文件 第一个是“d”表示文件目录 …

从BEVDET来学习如何生成trt以及如何去写这些C++内容

0. 简介 对于深度学习而言,通过模型加速来嵌入进C是非常有意义的,因为本身训练出来的pt文件其实效率比较低下,所以这里我们将以BEVDET作为例子,来向读者展示如何去生成trt,并完善engine加速。这里最近受到优刻得的使用…