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

练习2-线性回归迭代(李沐函数简要解析)

环境:再练习1中
视频链接:https://www.bilibili.com/video/BV1PX4y1g7KC/?spm_id_from=333.999.0.0

代码与详解

数据库
numpy 数据处理处理
torch.utils 数据加载与数据
d2l 专门的库
nn 包含各种层与激活函数

import numpy as np
import torch 
from torch.utils import data
from d2l import torch as d2l
from torch import nn

生成数据集
w=torch.tensor([2,-3.4]) 生成一维两个向量的张量
features,labels=d2l.synthetic_data(w,b,nume) 生成nume个w为权重,b为偏置的数据

w=torch.tensor([2,-3.4])
b=4.2
features,labels=d2l.synthetic_data(w,b,100)

定义对数据集的读取
data.TensorDataset(*data_arrays) 将多个张量合并为一个 通常用于合并特征值与标签 data_arrays=(features,labels)
data.DataLoader(dataset,batchsize,shuffle=true)每次根据上一个函数返回的对象读取batchsize个值 并打乱数据

def load_arrays(data_arrays,batch_size,is_train=True):dataset=data.TensorDataset(*data_arrays)return data.DataLoader(dataset,batch_size,is_train)

定义数据加载器 并 调用
next(iter(已初始化的数据加载器)) 重新调用数据加载器

batch_size=10
data_iter=load_arrays((features,labels),batch_size)
next(iter(data_iter))

定义模型

定义为线性模型且只有一层
nn.Sequential() 用于包装层
nn.linear(2,1) 用于定义两输入一输出的线性层

net=nn.Sequential(nn.Linear(2,1))

初始化参数 w,b,lr,epoch,batch_size
net[0].weight.data.normal 正态分布
net[0].bias.data.fill_(0) b赋值

net[0].weight.data.normal_(0,0.01)
net[0].bias.data.fill_(0)

定义损失函数 平方误差
nn.MSELoss()

Loss=nn.MSELoss()

优化算法 小批量梯度下降 torch.optim.SGD(net.parameters(), lr=0.03)

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

训练

epochs=3
for epoch in range(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}')

相关函数与组成部分

定义模型

定义线性回归模型
from torch import nn
net=nn.Sequential(nn.Linear(2,1))

为模型赋值

w,b正态分布
net[0].weight.data.normal_(0,0.01)
net[0].bias.data.fill_(0)

定义损失函数

Loss=nn.MSELoss()

定义优化算法

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

(训练与反向传播不太了解)

相关的Python语法

def 函数名(变量=True):return for epoch in range(epochs):

相关文章:

  • 命令行启动mongodb服务器的问题及解决方案 -- Unrecognized option: storage.journal
  • springboot 实现本地文件存储
  • SD NAND:为车载显示器注入智能与安全的心脏
  • selenium测试工具用来模拟用户浏览器的操作
  • MySQL常见面试题总结
  • Node.js基础---Express中间件
  • 利用 lxml 库的XPath()方法在网页中快速查找元素
  • kvm虚拟机修改网络模式
  • MySQL进阶之(三)InnoDB数据存储结构之数据页结构
  • SpringBoot源码解读与原理分析(三十八)SpringBoot整合WebFlux(一)WebFlux的自动装配
  • 利用FFMPEG 将RTSP流的音频G711 转码为AAC 并 推流到RTMP
  • Git源码管理
  • docker 基础(二)
  • 民爆5G智能制造工厂数字孪生可视化平台,推进民爆工业数字化转型
  • unity初学问题:如何修改图片的坐标
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 《剑指offer》分解让复杂问题更简单
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • 2019.2.20 c++ 知识梳理
  • AHK 中 = 和 == 等比较运算符的用法
  • Angular 响应式表单之下拉框
  • GraphQL学习过程应该是这样的
  • JavaScript函数式编程(一)
  • JavaScript新鲜事·第5期
  • Linux后台研发超实用命令总结
  • MySQL数据库运维之数据恢复
  • 当SetTimeout遇到了字符串
  • 给新手的新浪微博 SDK 集成教程【一】
  • 工作中总结前端开发流程--vue项目
  • 理解在java “”i=i++;”所发生的事情
  • 码农张的Bug人生 - 见面之礼
  • 前端面试之CSS3新特性
  • 深度学习入门:10门免费线上课程推荐
  • 数组大概知多少
  • 微信支付JSAPI,实测!终极方案
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • 2017年360最后一道编程题
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • #define
  • #define与typedef区别
  • #ubuntu# #git# repository git config --global --add safe.directory
  • (1)(1.9) MSP (version 4.2)
  • (12)目标检测_SSD基于pytorch搭建代码
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (备忘)Java Map 遍历
  • (分布式缓存)Redis持久化
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (剑指Offer)面试题34:丑数
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (十)c52学习之旅-定时器实验