首页>>人工智能->【Dive into Deep Learning / 动手学深度学习】第二章

【Dive into Deep Learning / 动手学深度学习】第二章

时间:2023-11-30 本站 点击:1

前言

Hello!

非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~  

自我介绍  ଘ(੭ˊᵕˋ)੭

昵称:海轰

标签:程序猿|C++选手|学生

简介:因C语言结识编程,随后转入计算机专业,获得过国家奖学金,有幸在竞赛中拿过一些国奖、省奖...已保研。

学习经验:扎实基础 + 多做笔记 + 多敲代码 + 多思考 + 学好英语!  

唯有努力?  

知其然 知其所以然!

2.1 数据操作

2.1.1. 入门

torch.arange()

x = torch.arange(12)x

tensor([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])

shape

x.shape

torch.Size([12])

numel()

张量中元素的总数

x.numel()

12

reshape()

可以用-1来调用此自动计算出维度的功能。  即我们可以用x.reshape(-1,4)x.reshape(3,-1)来取代x.reshape(3,4)

ones()

torch.ones((2, 3, 4))

randn()

创建一个形状为(a,b,..)的张量。 其中的每个元素都从均值为0、标准差为1的标准高斯分布(正态分布)中随机采样

torch.randn(3, 4)

2.1.2. 运算符

+、-、*、/、** 、exp

同一形状的任意两个张量上调用按元素操作

总结:张量形状一样,在对应位置的元素进行相应的运算

多个张量连结(concatenate)

使用torch.cat()

==

sum()

2.1.3. 广播机制

a是3行1列, b是1行三列a与b相加时a变为3行2列(扩列),b也变为3行2列(扩行),再相加(对应位置元素相加)

2.1.4. 索引和切片

X[1:3]:[1,3),第一行、第二行(不包括第三行)

指定索引来将元素写入矩阵

2.1.5. 节省内存

id():查询变量在内存中的位置

执行Y=Y+X时

先计算Y+X,得到一个结果,会保存在一个新的内存里面

然后再使变量Y指向这个内存

一般来说,这样的操作不可取:同时更新多个参数,需要多个新内存

所以需要尽量进行原地更新

若不进行原地更新,其他引用仍然会指向旧的内存位置, 某些代码可能会无意中引用旧的参数

比如原来Y和K、T都指向一个内存地址,但是执行完Y=Y+X后,Y指向了新的内存地址,但是K、T依然还指向原来的内存地址,再使用K、T则会发生错误,所以尽量需要原地修改,这样修改后,K、T、Y依然指向的是同一个内存地址

可以使用切片表示法将操作的结果分配给先前分配的数组,例如Y[:] = <expression>,实现原地操作

X = torch.arange(3)Y = torch.arange(3)before = id(Y)Y = Y + Xid(Y) == before# False

使用Y[:] = Y + X

X = torch.arange(3)Y = torch.arange(3)before = id(Y)Y[:] = Y + Xid(Y) == before# True

或者 Y += X

X = torch.arange(3)Y = torch.arange(3)before = id(Y)Y += Xid(Y) == before# True

2.1.6. 转换为其他Python对象

结语

学习资料:http://zh.d2l.ai/

文章仅作为个人学习笔记记录,记录从0到1的一个过程

希望对您有一点点帮助,如有错误欢迎小伙伴指正

原文:https://juejin.cn/post/7101637176122671141


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