当前位置: 首页 > news >正文

李沐深度学习-线性回归从零开始

# 核心Tensor,autograd
import torch
from IPython import display
import numpy as np
import random
from matplotlib import pyplot as pltimport syssys.path.append('路径')
from d2lzh_pytorch import *'''
backward()函数:一次小批量执行完在进行反向传播
线性回归模型步骤;1.数据处理2.模型定义:根据矩阵形式运算,模型可以一次计算多个样本,比如X:1000x2, w:2x1  则模型可以一次计算1000个样本3.损失函数:4.优化算法:sgd则是小批量中每个样本loss运行完后,对应参数的梯度进行了累加,得到一个小批量的代表梯度 w1,w2,b然后将每个小批量的参数梯度进行梯度下降5.模型预测
'''
# ------------------------------------------------------------------------
# 生成数据集
'''
样本X=1000,特征=2,w=2,-3.4;b=4.2   随机噪声ξ     y=Xw+b+ξ
噪声服从均值为0,标准差为0.01的正态分布  噪声代表了数据集中无意义的干扰
'''
num_inputs = 2  # 特征数
num_examples = 1000  # 样本数量
true_w = [2, -3.4]  # w
true_b = 4.3  # b
# 生成所有包含特征  1000x2的样本 向量
features = torch.randn(num_examples, num_inputs, dtype=torch.float32)
# 下列运算属于矢量运算  预测y 表达式  是个向量,1000x1
labels = true_w[0] * features[:, 0] + true_w[1] * features[:, 1] + true_b
# 添加符合正态分布的噪声
labels += torch.tensor(np.random.normal(0, 0.01, size=labels.size()), dtype=torch.float32)# set_figsize()
# plt.scatter(features[:, 1].numpy(), labels.numpy(), 1)
# plt.savefig('/home/eilab2023/yml/project/limu/picture/picture.png')# 读取数据集# ---------------------------------------------------------------------------------------------# ---------------------------------------------------------------------------------------------
# 定义模型# ---------------------------------------------------------------------------------------------# 损失函数
# ---------------------------------------------------------------------------------------------# 优化算法
# ---------------------------------------------------------------------------------------------# 模型训练
# ---------------------------------------------------------------------------------------------
lr = 0.03
num_epoch = 3
net = linreg
loss = squared_loss
'''
每次返回一个batch-size大小随机样本的特征和标签
'''
batch_size = 10
# 初始化模型参数 w b  都是列矩阵  上面的是确定的公式,x,w,b都是确定的,label确定。这里的参数是初始化模拟的
# 一般是,X确定,label确定,然后初始化w,b,在模型训练寻找最优解,这里提前确定是为了方便
w = torch.tensor((np.random.normal(0, 0.01, (num_inputs, 1))), dtype=torch.float32)
b = torch.tensor(1, dtype=torch.float32)
w.requires_grad_(requires_grad=True)
b.requires_grad_(requires_grad=True)
# 外部定义了变量w后若在方法内有改变w,则该变量值会随着改变for epoch in range(num_epoch):for X, y in data_iter(batch_size, features, labels):l = loss(net(X, w, b), y).sum()  # 小批量的损失计算完l.backward()  # 计算小批量的样本参数梯度,这里每个样本的参数梯度会自动累加sgd([w, b], lr, batch_size)  # 一个小批量出一个w,b   梯度下降算法# 一个小批量的参数更新后就要对参数的梯度进行清零操作w.grad.data.zero_()b.grad.data.zero_()train_l = loss(net(features, w, b), labels)  # 这里的w,b是一轮所有的批量更新完成之后得到的最新的值,然后用于所有的样本进行损失计算print('epoch %d, loss %f' % (epoch + 1, train_l.mean().item()))  # 因为loss是一个1000x1的一个张量
http://www.lryc.cn/news/283698.html

相关文章:

  • CentOS 8.5 安装图解
  • 好用的流程图工具
  • 数据结构:链式栈
  • openssl3.2 - 官方demo学习 - mac - gmac.c
  • HugggingFace 推理 API、推理端点和推理空间相关模型部署和使用以及介绍
  • python的tabulate包在命令行下输出表格不对齐
  • LLM之幻觉(二):大语言模型LLM幻觉缓减技术综述
  • C# 使用多线程,关闭窗体时,退出所有线程
  • 数据结构实验6:图的应用
  • Spring Boot整合JUnit
  • uniapp写小程序实现清除缓存(存储/获取/移除/清空)
  • js菜单隐藏显示
  • 学习Spring的第五天(Bean的依赖注入)
  • GAN在图像数据增强中的应用
  • Git推送本地文件到仓库
  • Django笔记(一):环境部署
  • 用Pytorch实现线性回归模型
  • WordPress模板层次与常用模板函数
  • HarmonyOS应用开发者高级认证试题库(鸿蒙)
  • 系分备考计算机网络传输介质、通信方式和交换方式
  • js原生面试总结
  • 接口自动化测试框架设计
  • 详解ISIS动态路由协议
  • Linux操作系统----gdb调试工具(配实操图)
  • 去除GIT某个时间之前的提交日志
  • 4 python快速上手
  • 单元测试-spring-boot-starter-test+junit5
  • CentOS 7上安装Anaconda 详细教程
  • 2023年全球软件架构师峰会(ArchSummit深圳站):核心内容与学习收获(附大会核心PPT下载)
  • RT-Thread Studio学习(十六)定时器计数