欢迎订阅本专栏:《PyTorch深度学习实践》
订阅地址:https://blog.csdn.net/sinat_33761963/category_9720080.html
- 第二章:认识Tensor的类型、创建、存储、api等,打好Tensor的基础,是进行PyTorch深度学习实践的重中之重的基础。
- 第三章:学习PyTorch如何读入各种外部数据
- 第四章:利用PyTorch从头到尾创建、训练、评估一个模型,理解与熟悉PyTorch实现模型的每个步骤,用到的模块与方法。
- 第五章:学习如何利用PyTorch提供的3种方法去创建各种模型结构。
- 第六章:利用PyTorch实现简单与经典的模型全过程:简单二分类、手写字体识别、词向量的实现、自编码器实现。
- 第七章利用PyTorch实现复杂模型:翻译机(nlp领域)、生成对抗网络(GAN)、强化学习(RL)、风格迁移(cv领域)。
- 第八章:PyTorch的其他高级用法:模型在不同框架之间的迁移、可视化、多个GPU并行计算。
2.4.1 Storage
tensor中的值是存储在连续的内存块中的,由torch.Storage实例管理着。一个storage即是一个一维的向量。
多个不同的tensor可以存储在同一个storage中,只是对数据的索引不同,入下图,一个2行3列的tensor和3行2列的tensor的值都存储在同一个storage中,其中storage中索引为0位置存储着两个tensor的第一行第一列的值4。正因如此,当从一个已有的Tensor创建一个新的tensor时总能很快,因为其在内存中只会创建一次。
现在来看看可以用哪些api来操作storage:
获取tensor的storage:
import torch
# 3*2的tensor
points = torch.tensor([[1.0, 4.0],[2.0, 1.0],[3.0, 5.0]])
points.storage()
1.0
4.0
2.0
1.0
3.0
5.0
[torch.FloatStorage of size 6]
对storage进行索引:
points_storage = points.storage()
points_storage[0]
1.0
注意:storage永远是一维的数组,任何维度的tensor都存储在一维的storage中。
更改storage的值:
tensor的值存储在storage中,若改变了storage的值,势必会改变tensor的值。
points_storage = points.storage()
points_storage[0] = 2.0
print(points)
tensor([[2., 4.],
[2., 1.],
[3., 5.]])
可见,改变了points的storage中索引为0的值,同时也改变了points中第一行第一列的值。
现在,你知道了tensor的值时存储在storage中,但你肯定会疑惑,我们如何知道在tensor中的某个值,存储在storage的什么位置,也就是说如何知道storage时如何存储tensor的。Pytorch中提供了3个信息来连接tensor与storage: size, storage offset, strides。下面三小节会依次介绍它们。
2.4.2 size
size(在numpy中叫shape) 是一个元组,显示tensor中每个维度的元素数量。这个大家自然是不陌生,如:
points = torch.tensor([[1.0, 4.0],[