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

pytorch dataset读取数据流程_动手学习深度学习Pytorch——线性回归

最近参加了Datawhale组织的新一轮公益学习,这本书买了很久但是没看,顺便复现提高pytorch和python的编程能力!嗯这就是我的目标,废话不多说,直接开撸!

python part:

# define a timer class to record time

用类来定义一个计时器Timer,组成部分是times一个空数组[],start()这个函数。

start()这个函数生成一个start_time值是time.time(),time.time()返回当前时间的时间戳(1970纪元后经过的浮点秒数),也就是现在到1970有多少多少秒。

stop()这个函数是在times这个数组后面加一个time.time() - self.start_time,也就是start()到stop()这两个函数启动的时间相差了多少秒, return self.times[-1]返回times的最后一个元素,也就是返回的是最近一次的stop()到最近一次start()的时间间隔。

avg()这个函数return sum(self.times)/len(self.times),由上面我们可以知道times这个数组记录的是每次使用start()和stop()的时间间隔,于是求和再除于长度就是多次时间间隔的平均。

sum()这个函数return sum(self.times),因此就是总耗时了。

小结:

这个Timer类是这样使用的

#实例化Timer类

pytorch part:

这部分代码是用于人造数据的

num_inputs 

features = torch.tensor(np.random.normal(0, 1, (num_examples, num_inputs)), dtype=torch.float)

torch.tensor(size,dtype)——主要就是两个参数多大的,什么类型的

为什么要用torch.tensor?——理解成这是pytorch框架下的计算单元,类比线性空间中的向量才能运算哦。

np.random.normal(μ, σ, (多少个, 多少维))——记忆:random随机,normal正态分布,之后就很好理解了吧,也就是什么正态分布的随机数,要给什么正态分布——N(μ, σ),多少个随机数——(多少个, 多少维)。

例子:

v2-431cb75fda21c39dd539b10b410a8a65_b.jpg

labels = true_w[0] * features[:, 0] + true_w[1] * features[:, 1] + true_b

可以理解成算y = Xβ+b,首先features一定是个类似上面那个图的a那个样的一个1000(条)*2(维)的tensor。

features[:, 0]就是类似下图这种概念,红色箭头说明我们有2行,蓝色箭头说明我们有3列,[:,0]中的冒号是行我全都要,于是所有行都有绿色的箭头飞了出去,0代表我只要第一列,于是只要第一列有绿色箭头飞出去,所有绿色箭头相交的黄色勾勾就是我们要的tensor,这其实是python的一种数组筛选的方法。

v2-303b5d3a495ab759d386e79dcc44161d_b.jpg

由于我们是在pytorch这个框架下进行运算,所以我们要屈服于它的规则,首先它需要将数据转换成一个叫data.DataLoader的东西才行。

import 

我们看到Data.DataLoader下面有4个参数:

  1. dataset,首先你得指定一个数据集吧。
  2. batch_size,用这里的例子来说就是我们前面已经生产了1000条2维的数据了,我每次训练是1条1条算,还是10条10条算。batch_size越大你算的越快,但是要求的内存就变多了,因为你每次算的数多了。为什么说1条1条可以算,10条10条也可以算,我们假设大家都知道线性回归的所使用的算法是随机梯度下降,损失函数是MSE均方误差,你一条算出损失算一次梯度当然可以,我10条算一次损失也可以不是吗?
  3. shuffle,就是说这1000条数据是否要打乱输入。
  4. num_workers我个人理解就是需不需要多线程读取数据,可以加快读取数据的速度。

看一下data_iter是啥东西,是一个可迭代对象(好专业的名字,当成是发牌器好了,有两副牌一个是X,一个是y,可以一直发)

v2-d8f41e1832814e3ad8556c8caa4f1b75_b.jpg

接下来就进入到pytorch优势的地方了,它不用你花时间去定义那个y = Xβ+b,搞那些数组之间的运算只要你定义一个神经网络类就可以完成。

class 

nn.Linear(输入size, 输出size),这个nn.Linear就是如此方便,但凡你要做y = Xβ+b的线性运算,只要控制上面两个参数就可以了,默认带b,也就是bias偏移项。而且它会自己初始化好参数,非常人性化。

定义好这些那我们就可以开始训练了

第一步:定义损失函数

loss = nn.MSELoss()

第二部:定于迭代算法

import torch.optim as optim
optimizer = optim.SGD(net.parameters(), lr=0.03) 

第三步:训练

num_epochs 

当然你也可以这样测试你的模型

v2-01bbdcf4668fd8667791ed799f0432f0_b.jpg

相关文章:

  • python如何将列表去掉引号_如何将你的 Python 项目全面自动化?
  • 用python进行自然语言处理_用python进行图片整理
  • dbf文件怎么创建_spring boot 配置文件properties和YAML详解
  • python中类与对象之间的关系_面向对象进阶之类和类之间的关系
  • 网关是什么意思_网关的理解
  • matlab toolbox下载_Mac上Matlab常见问题
  • python redis 操作_Python redis set集合操作
  • fileinputstream读取文件_20M 文件用 Java 压缩从30秒到1秒的优化过程
  • python打印皮卡丘_用python打印你的宠物小精灵吧
  • 平方根python_python的平方根
  • python怎么测试c代码_可以使用基于Python的单元测试框架和跑步者来测试C代码
  • nginx 跨域访问配置_nginx配置用户访问认证
  • python爬虫xpath教程_Spider-Python爬虫之XPath 教程
  • python常见报错类型_python打印错误类型
  • 华为官方解锁工具_开启“应用锁”和“健康使用手机密码”的华为,哪个功能对于用户隐私更安全?...
  • 《Java编程思想》读书笔记-对象导论
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • echarts的各种常用效果展示
  • javascript面向对象之创建对象
  • tweak 支持第三方库
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • 翻译:Hystrix - How To Use
  • 前端性能优化——回流与重绘
  • 我感觉这是史上最牛的防sql注入方法类
  • 线性表及其算法(java实现)
  • 原生Ajax
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • Spring第一个helloWorld
  • ​比特币大跌的 2 个原因
  • #图像处理
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • $(function(){})与(function($){....})(jQuery)的区别
  • (003)SlickEdit Unity的补全
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (接口封装)
  • (六)vue-router+UI组件库
  • (转)负载均衡,回话保持,cookie
  • (转载)Linux网络编程入门
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .Net Core与存储过程(一)
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • .net6Api后台+uniapp导出Excel
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项
  • .NET性能优化(文摘)
  • /proc/vmstat 详解
  • [.NET]桃源网络硬盘 v7.4
  • [2016.7.Test1] T1 三进制异或
  • [C#]winform利用seetaface6实现C#人脸检测活体检测口罩检测年龄预测性别判断眼睛状态检测
  • [iOS]-UIKit
  • [JS]Math.random()随机数的二三事
  • [JS入门到进阶] 前端开发不能写undefined?这是误区!