Pytorch学习笔记-第三章Tensor和Autograd
记录一下个人学习和使用Pytorch中的一些问题。强烈推荐 《深度学习框架PyTorch:入门与实战》.写的非常好而且作者也十分用心,大家都可以看一看,本文记录按照该书学习Pytorch时在第三章Tensor和Autograd遇到的一些问题。
Tensor
对tensor的大部分操作同时支持torch和tensor的接口如torch.sum (torch.sum(a, b))与tensor.sum (a.sum(b))功能等价;同时带‘_’后缀的函数会修改调用者自己的数据,在实际应用中需加以区分。
创建
1.指定tensor的形状生成的tensor数值取决于内存随机,输出时可能溢出。
2.tensor.numel()输出tensor里面的元素个数。
3.tensor.shape和tensor.size()等价,注意shape没有()调用
size调整
通过tensor.view方法可以调整tensor的形状,但必须保证调整前后元素总数一致,但是会和原来的共享内存。(可以某一维设置为-1自动计算尺寸)同时squeeze和unsqueeze两个函数可以增加减少某一维度(消去只有一个元素的维度)。
c = b.view(1, 1, 1, 2, 3)
c.squeeze(0) # 压缩第0维的“1”
c.squeeze() # 把所有维度为“1”的压缩
resize_是另一种可用来调整size的方法,但与view不同,它可以修改tensor的大小。如果新大小超过了原大小,会自动分配新的内存空间,而如果新大小小于原大小,则之前的数据依旧会被保存,再次变大size的话又会出现原来的值
索引
索引方式类似于numpy
a[0] # 第0行(下标从0开始)
a[:, 0] # 第0列
a[0][2] # 第0行第2个元素,等价于a[0, 2]
a[0, -1] # 第0行最后一个元素
a[:2] # 前两行
a[: