d2l 线性回归的从零开始实现

news/2025/2/1 11:54:57/

文章目录

  • 线性回归的从零开始实现
    • 1. 构造人造数据集
    • 2. data_iter每次读取一个小批量
    • 3. 定义 初始化模型参数
    • 4. 定义模型
    • 5. 定义损失函数
    • 6. 定义优化算法
    • 7. 训练过程

线性回归的从零开始实现

  • 导入需要使用的包
  • 数据流水线、模型、损失函数、小批量随机梯度下降器

1. 构造人造数据集

  • y=xw+b+c
  • feature,label=synthetic_data(w,b,num)
  • detach().numpy()有些版本tensor需要线detach出来才能转换为numpy

2. data_iter每次读取一个小批量

  • data_iter(batch_size,features,labels)
  • num
  • 打乱下标索引 随机顺序访问样本
  • 每次跳batch_size的大小,如果超出取最后一个
  • yeid每次返回一个x,y

3. 定义 初始化模型参数

  • w正态分布,resuires_gard=True
  • b

4. 定义模型

  • linreg(x,w,b)
  • 线性回归模型
  • return torch.matual(x,w)+b

5. 定义损失函数

def squared_loss(y_hat,y)return (y_hat-y.reshape(y_hat.shape))**2/2

6. 定义优化算法

def sgd(params,lr,batch_size)with torch.no_grad():for param in params:param-=lr*param.grad/batch_sizeparam.grad.zero_()

7. 训练过程

lr=0.03 # 调整超参数对结果产生的影响
num_epochs=3
net=lireg
loss=squared_lossfor epoch in range(num_epoch)for x,y in data_iter(batch_size,features,labels):l=loss(net(x,w,b),y) # l (batch_size,1)l.sum().backward()sgd([w,b],lr,batch_size)with torch.no_gard():train_l=loss(net(features,w,b),labels)printf(f'epoch{epoch+1},loss{float(train_l.mean()):f}')
  • 比较真实参数和通过训练学到的参数来评估训练的成功成功程度

http://www.ppmy.cn/news/1008788.html

相关文章

MybatisPlus中的实体类中的一些注解

TableName("t_user")//假如实体类是User,而数据库中是t_user,使用这个注解 public class User {//TableId(本来要传的数据是id,而实体类和数据表中都使用了uid)//TableId(value "uid")(实体类中是…

【雕爷学编程】Arduino动手做(181)---Maixduino AI开发板7

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&am…

无涯教程-Perl - foreach 语句函数

foreach 循环遍历列表值,并将控制变量(var)依次设置为列表的每个元素- foreach - 语法 Perl编程语言中的 foreach 循环的语法是- foreach var (list) { ... } foreach - 流程图 foreach - 示例 #!/usr/local/bin/perllist(2, 20, 30, 40, 50);# foreach loop ex…

初阶C语言——特别详细地介绍函数

系列文章目录 第一章 “C“浒传——初识C语言(更适合初学者体质哦!) 第二章 详细认识分支语句和循环语句以及他们的易错点 第三章 初阶C语言——特别详细地介绍函数 目录 系列文章目录 前言 一、函数是个什么鬼东西? 二、C语…

【网络编程】定时器的应用:基于升序链表的定时器处理非活动连接

首先我们实现一个数据结构用来存储定时器&#xff0c;它是一个升序的双向链表。主要在其中实现了插入定时器&#xff0c;删除定时器&#xff0c;调整定时器位置的操作&#xff0c;其实现如下&#xff1a; #ifndef LST_TIMER #define LST_TIMER#include <netinet/in.h> #…

Mock.js的基本使用方法

官网网址&#xff1a;Mock.js (mockjs.com) 当前端工程师需要独立于后端并行开发时&#xff0c;后端接口还没有完成&#xff0c;那么前端怎么获取数据&#xff1f; 这时可以考虑前端搭建web server自己模拟假数据&#xff0c;这里我们选第三方库mockjs用来生成随机数据&#xf…

vue2-组件和插件的区别

1、组件是什么&#xff1f; 组件就是把图形、非图形的各种逻辑均抽象为一个统一的概念&#xff08;组件&#xff09;来实现开发的模式&#xff0c;在vue中每一个.vue文件都可以被视为一个组件。 组件的优势&#xff1a; 降低整个系统的耦合度&#xff0c;在保持接口不变的情况下…

[Linux]理解文件系统!动静态库详细制作使用!(缓冲区、inode、软硬链接、动静态库)

hello&#xff0c;大家好&#xff0c;这里是bang___bang_&#xff0c;今天来谈谈的文件系统知识&#xff0c;包含有缓冲区、inode、软硬链接、动静态库。本篇旨在分享记录知识&#xff0c;如有需要&#xff0c;希望能有所帮助。 目录 1️⃣缓冲区 &#x1f359;缓冲区的意义 …