Pytorch 基础 -tensor 数据结构

torch.Tensor
torch.Tensor 是一种包含单一数据类型元素的多维矩阵,类似于 numpy 的 array。可以使用使用 torch.tensor() 方法将 python 的 list 或序列数据转换成 Tensor 数据,生成的是dtype 默认是 torch.FloatTensor。
注意
torch.tensor()总是拷贝 data。如果你有一个 tensor data 并且仅仅想改变它的requires_grad属性,可用requires_grad_()或者detach()来避免拷贝。如果你有一个numpy数组并且想避免拷贝,请使用torch.as_tensor()。
1,指定数据类型的 tensor 可以通过传递参数 torch.dtype 和/或者 torch.device 到构造函数生成:
注意为了改变已有的 tensor 的 torch.device 和/或者 torch.dtype, 考虑使用
to()方法.
2,Tensor 的内容可以通过 Python 索引或者切片访问以及修改:
3,使用 torch.Tensor.item() 或者 int() 方法从只有一个值的 Tensor 中获取 Python Number:
4,Tensor 可以通过参数 requires_grad=True 创建, 这样 torch.autograd 会记录相关的运算实现自动求导:
5,每一个 tensor 都有一个相应的 torch.Storage 保存其数据。tensor 类提供了一个多维的、strided 视图, 并定义了数值操作。
Tensor 数据类型
Torch 定义了七种 CPU Tensor 类型和八种 GPU Tensor 类型:
torch.Tensor 是默认的 tensor 类型(torch.FloatTensor)的简称,即 32 位浮点数数据类型。
Tensor 的属性
Tensor 有很多属性,包括数据类型、Tensor 的维度、Tensor 的尺寸。
数据类型:可通过改变 torch.tensor() 方法的
dtype参数值,来设定不同的Tensor数据类型。维度:不同类型的数据可以用不同维度(dimension)的张量来表示。标量为
0维张量,向量为1维张量,矩阵为2维张量。彩色图像有rgb三个通道,可以表示为3维张量。视频还有时间维,可以表示为4维张量,有几个中括号[维度就是几。可使用dim() 方法获取tensor的维度。尺寸:可以使用
shape属性或者size()方法查看张量在每一维的长度,可以使用view()方法或者reshape() 方法改变张量的尺寸。Pytorch 框架中四维张量形状的定义是(N, C, H, W)。
关于如何理解 Pytorch 的 Tensor Shape 可以参考 stackoverflow 上的这个 回答。
样例代码如下:
程序输出结果如下:
view 和 reshape 的区别
两个方法都是用来改变 tensor 的 shape,view() 只适合对满足连续性条件(
contiguous)的 tensor 进行操作,而 reshape() 同时还可以对不满足连续性条件的 tensor 进行操作。在满足 tensor 连续性条件(
contiguous)时,a.reshape() 返回的结果与 a.view() 相同,都不会开辟新内存空间;不满足contiguous时, 直接使用 view() 方法会失败,reshape()依然有用,但是会重新开辟内存空间,不与之前的 tensor 共享内存,即返回的是 ”副本“(等价于先调用contiguous()方法再使用view()方法)。更多理解参考这篇文章
Tensor 与 ndarray
1,张量和 numpy 数组。可以用 .numpy() 方法从 Tensor 得到 numpy 数组,也可以用 torch.from_numpy 从 numpy 数组得到 Tensor。这两种方法关联的 Tensor 和 numpy 数组是共享数据内存的。可以用张量的 clone方法拷贝张量,中断这种关联。
2,item() 方法和 tolist() 方法可以将张量转换成 Python 数值和数值列表。
创建 Tensor
创建 tensor ,可以传入数据或者维度,torch.tensor() 方法只能传入数据,torch.Tensor() 方法既可以传入数据也可以传维度,强烈建议 tensor() 传数据,Tensor() 传维度,否则易搞混。
传入维度的方法
样例代码:
参考资料
版权声明: 本文为 InfoQ 作者【叶致习】的原创文章。
原文链接:【http://xie.infoq.cn/article/8d4c3937fd62c334f9a4f0fef】。文章转载请联系作者。










评论