前言
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