动手学深度学习(二)---线性回归

news2024/11/18 9:33:34

文章目录

    • 1.线性回归从0实现
    • 2.线性回归简洁实现
    • 【相关方法】

1.线性回归从0实现

从0开始实现整个方法,包括数据流水线、模型、损失函数和小批量随机梯度下降优化器
(1)导入需要的包

% matplotlib inline
import random
import torch
from d2l import torch as d2l  #pip install d2l torch torchvision

(2)构造数据
在这里插入图片描述

def synthetic_data(w,b,num_examples):
    """生成y = Xw + b + 噪声"""
    X = torch.normal(0, 1, (num_examples, len(w)))  #生成均值为0,方差为1的随机数X,大小为:num个样本,列数为len(w)
    Y = torch.matmul(X, w) + b
    Y += torch.normal(0, 0.01, Y.shape) # 噪音
    return X, Y.reshape((-1,1))  #将X,Y以列向量的形式返回

true_w = torch.tensor([2,-3.4])
true_b = 4.2
features, labels = synthetic_data(true_w, true_b, 1000)
print('features:',features[0], '\nlabel:',labels[0])

在这里插入图片描述

(3)定义一个data_iter函数,该函数接收批量大小、特征矩阵和标签向量作为输入,生成大小为batch_size的小批量

def data_iter(batch_size, features, labels):
    num_examples = len(features) #样本数量
    indices = list(range(num_examples))  # 每个样本的index,0到num_example-1,存成list
    # print(indices)
    # 随机读取数据
    random.shuffle(indices)  # 打乱indices,即打乱index,以做到随机访问每一个样本
    # print(indices)
    # 从0到num_examples-1,步长为batch_size
    for i in range(0, num_examples, batch_size):
        batch_indices = torch.tensor(indices[i:min(i + batch_size,num_examples)])
        # yield:以(x,y)的形式返回
        yield features[batch_indices],labels[batch_indices]

batch_size = 10
for X, y in data_iter(batch_size, features, labels):
    print(X, '\n', y)
    break

(4)定义损失函数

def squared_loss(y_hat, y):
    """均方损失"""
    return (y_hat - y.reshape(y_hat.shape))**2 / 2

(5)定义优化算法

def sgd(params, lr, batch_size):
    """小批量随机梯度下降"""
    with torch.no_grad( ):
        for param in params:
            param -= lr * param.grad /batch_size
            param.grad.zero_()

(6)训练过程

lr = 0.03  #学习率
num_epochs = 3
net = linreg
loss = squared_loss

for epoch in range(num_epochs):
    for X,y in data_iter(batch_size, features, labels):
        l = loss(net(X, w, b), y)
        l.sum().backward()
        sgd([w,b], lr, batch_size)
    with torch.no_grad():
        train_l = loss(net(features, w, b), labels)
        print(f'epoch {epoch+1},loss {float(train_l.mean()):f}')
epoch 1,loss 0.037877
epoch 2,loss 0.000149
epoch 3,loss 0.000053

2.线性回归简洁实现

(1)使用深度学习框架实现线性回归模型,生成数据集

import numpy as np
import torch
from torch.utils import data  # 处理数据的相关模块
from d2l import torch as d2l

true_w = torch.tensor([2,-3.4])
true_b = 4.2
# 通过人工数据生成的函数合成所需要的数据
features, labels = d2l.synthetic_data(true_w, true_b, 100)

(2)调用框架中现有的API来读取数据

def load_array(data_arrays, batch_size, is_train=True):
    """构造一个PyTorch数据迭代器"""
    dataset = data.TensorDataset(*data_arrays)
    return data.DataLoader(dataset,batch_size,shuffle=is_train)

batch_size = 10
data_iter = load_array((features, labels), batch_size)

next(iter(data_iter))
[tensor([[-2.6414, -0.0434],
         [-0.4269, -0.6939],
         [-1.0043,  1.0792],
         [-0.7633,  0.5864],
         [-1.0033, -0.0062],
         [ 0.2628, -0.9052],
         [-1.2950, -0.1154],
         [ 1.1647, -1.1407],
         [ 1.4055, -1.1912],
         [ 0.4733,  1.5539]]),
 tensor([[-0.9327],
         [ 5.7303],
         [-1.4759],
         [ 0.6839],
         [ 2.2185],
         [ 7.8047],
         [ 2.0032],
         [10.4156],
         [11.0725],
         [-0.1272]])]

(3)使用框架预定义好的层

from torch import nn

net = nn.Sequential(nn.Linear(2,1))  # 输入维度为2,输出维度为1

(4)初始化模型参数

net[0].weight.data.normal_(0, 0.01) #使用正态分布替换data的值
net[0].bias.data.fill_(0)
tensor([0.])

(5)计算均方误差使用MSELoss类

Loss = nn.MSELoss()

(6)实例化SGD

trainer = torch.optim.SGD(net.parameters(), lr=0.03)

(7)训练

num_epochs = 3
for epoch in range(num_epochs):
    for X, y in data_iter:
        l = Loss(net(X), y)
        trainer.zero_grad()
        l.backward()
        trainer.step()
    l = Loss(net(features), labels)
    print(f'epoch {epoch+1}, loss {l:f}')
epoch 1, loss 0.000105
epoch 2, loss 0.000105
epoch 3, loss 0.000105

【相关方法】

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

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

相关文章

3分钟看完NVIDIA GPU架构及演进

近期随着 AI 市场的爆发式增长,作为 AI 背后技术的核心之一 GPU(图形处理器)的价格也水涨船高。GPU 在人工智能中发挥着巨大的重要,特别是在计算和数据处理方面。目前生产 GPU 主流厂商其实并不多,主要就是 NVIDIA、AM…

《研发效能 100 问》首发,多位专家解读「研效提升」的破局之道?

为了可以帮助更多研发管理者和研发效能负责人,了解构建研发效能体系应从何做起,以及在构建过程中需要解决哪些疑难问题,有哪些最佳实践可以借鉴。2023 年 7 月,思码逸发起,由行业知名研发效能专家张乐老师担任出品人&a…

【Skynet 入门实战练习】开发环境搭建 | 运行第一个项目 | debug console 简单使用

文章目录 写在前面开发环境搭建skynet配置文件项目,启动! debug console 写在前面 本系列【Skynet 入门实战练习】所有源码同步:https://gitee.com/Cauchy_AQ/skynet_practice 开发环境搭建 skynet skynet 框架地址:https://g…

第7章-使用统计方法进行变量有效性测试-7.4.1-简单线性回归

目录 基本概念 变量之间的关系 相关分析 回归分析 相关分析和回归分析的关系 一元线性回归模型 总体回归函数 样本回归函数 线性回归模型的假定 普通最小二乘法(Ordinary Least Squares,OLS) 拟合优度指标 回归系数估计量的性质 …

主播-产品痛点话术

—、用户体验差我们的产品在用户体验方面存在一些问题。首先,产品的操作流程不够顺畅,导致用户在使用过程中经常遇到困扰。另外,我们的产品界面设计不够美观,无法给用户带来愉悦的使用体验。针对这些问题,我们将对产品…

2015-2020年全国地区生产总值及一二三产构成数据总览,shp/excel格式

今天我们来整理了2015-2020全国地区生产总值及一二三产构成数据,数据格式为shpexcel格式,数据精度可达各区县。 另外,需要说明的是:由于统计年鉴指标调整,每一年的数据并非字段相同,字段详情请参考已下载数…

KT142C语音芯片客户反馈电脑端的配置文件,打开都正常,但是拷贝到KT142C内部就乱码

KT142C语音芯片客户反馈电脑端的配置文件,打开都正常,但是拷贝到KT142C内部就乱码 首先解释一下原理,KT142C内置的330Kbyte空间可供用户下载,实际上拿出程序部分的空间 作为声音存储介质的,也就是说,代码空…

SDWAN厂家排名

随着网络技术的不断发展,SDWAN(软件定义广域网)作为一种新兴的网络架构,正在受到越来 越多企业的关注和采用。选择一家可靠的SDWAN厂家成为企业成功部署和管理SDWAN的关键。本文将从技术实力、客户口碑以及市场占有率三个方面&…

数据仓库模式之详解 Inmon 和 Kimball

目录 一、前言 二、企业信息工厂(Inmon) 2.1 概念 2.2 主要组件 2.3 流程 三、多维数据仓库(Kimball) 3.1 概念 3.2 核心组件 3.3 流程 四、异同及用途对比 4.1 异同对比 4.2 特征比较 一、前言 大部分关于数据仓库构建…

数据智能引擎:企业模糊搜索API精准获取企业列表信息

引言 随着信息时代的迅速发展,数据变得愈加庞大和复杂。在这个大数据的时代,企业面临着海量信息的管理和利用挑战。为了更有效地获取并利用数据,企业信息模糊搜索API成为了企业数据智能引擎的一部分,为企业提供了精准的企业列表检…

系列十四、异步回调

一、概述 二、案例代码 /*** Author : 一叶浮萍归大海* Date: 2023/11/21 10:45* Description: 异步任务案例代码*/ public class CompletableFutureMainApp {public static void main(String[] args) throws ExecutionException, InterruptedException {CompletableFuture<…

缓存穿透、缓存雪崩、缓存击穿问题的解决思路

一、缓存穿透 缓存穿透 &#xff1a;缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在&#xff0c;这样缓存永远不会生效&#xff0c;这些请求都会打到数据库。 常见的解决方案有两种&#xff1a; 缓存空对象 优点&#xff1a;实现简单&#xff0c;维护方便 缺点&am…

工作记录---淘宝双11,亿级流量高并发是怎么抗住?(站在巨人的肩膀上学习,超开心~)--------脚踏实地,持续学习(看完这一篇获益匪浅)

什么是分布式&#xff1f; 系统中的多个模块在不同服务器上部署&#xff0c;即可称为分布式系统。 如Tomcat和数据库分别部署在不同的服务器上&#xff0c;或两个相同功能的Tomcat分别部署在不同服务器上。 什么是高可用&#xff1f; 系统中部分节点失效时&#xff0c;其他节…

MatrixOne完成与麒麟信安、欧拉的兼容互认

近日&#xff0c;超融合异构云原生数据库MatrixOne企业版软件V1.0完成了与欧拉开源操作系统&#xff08;openEuler简称“欧拉”&#xff09;、麒麟信安操作系统系列产品和虚拟化平台的相互兼容认证&#xff0c;通过了欧拉兼容性测评&#xff0c;获得了《openEuler技术测评证书》…

打造完美照片,尽在PhotoFoundry for Mac

想要给你的照片加上绚丽的滤镜、调整色彩和对比度&#xff0c;甚至进行精确的修图吗&#xff1f;PhotoFoundry for Mac将成为你的绝佳选择&#xff01; PhotoFoundry for Mac是一款功能强大的照片编辑软件&#xff0c;它为你提供了丰富多样的工具和特效&#xff0c;让你能够轻…

蓝桥杯每日一题2023.11.21

题目描述 “蓝桥杯”练习系统 (lanqiao.cn) 题目分析 思路&#xff1a; 1.去重排序将其进行预处理 2.用gcd得到最简比值 3.用gcd_sub分别计算分子、分母的指数最大公约数 #include<bits/stdc.h> using namespace std; const int N 110; typedef long long ll; ll…

VirtualBox7安装Ubuntu20及全屏、共享、粘贴板等设置

VirtualBox7安装Ubuntu20及全屏、共享、粘贴板等设置 1. 安装VirtualBox2. 安装Ubuntu202.1 获得x.vdi2.2 新建虚拟电脑 3. 增强设置3.1 增强功能3.2 全屏3.2 共享文件夹3.4 粘贴板 1. 安装VirtualBox 官网https://www.virtualbox.org/wiki/Downloads下载&#xff0c;笔者选择…

软考必须得从初级开始考吗?

软考是指软件技术专业资格考试&#xff0c;是由中国计算机技术职业资格认证中心&#xff08;NCTC&#xff09;主办的一项国家级考试。软考考试内容涵盖了软件工程、数据库、网络与信息安全、嵌入式系统等多个方面的知识&#xff0c;是评价软件技术人员专业水平的重要标准。 对于…

Python3.11+Pyside6开发电影下载程序

VideoSave是一款使用Python3.11Pyside6编写的提供下载电影/电视剧的软件&#xff0c;支持注册、登录、搜索、下载、查看日志等功能&#xff0c;提供了Window、Mac系统安装包。 先上效果图 提供功能 节省寻找资源的时间 ⌚️模糊搜索指定影片 &#x1f434;查看影片下载日志 &…

Idea2023 Springboot web项目正常启动,页面展示404解决办法

Idea2023 Springboot web项目正常启动,页面展示404解决办法 问题&#xff1a; 项目启动成功&#xff0c;但是访问网页&#xff0c;提示一直提示重定向次数过多&#xff0c;404 解决方法 在IDEA的Run/Debug Configurations窗口下当前的Application模块的Working directory中添…