2.4 Tensor的存储

本文介绍了PyTorch中Tensor的存储概念,包括Storage、size、storage offset和stride。Storage是Tensor值的存储区域,可以被多个Tensor共享。size表示Tensor各维度的元素数量,storage offset指示Tensor在Storage中的起始位置,而stride表示访问Tensor中下一个元素所需跳过的Storage元素数。此外,文章还讨论了获取子Tensor、转置操作以及如何判断和创建连续Tensor的方法。掌握这些知识有助于深入理解Tensor的工作原理并优化代码效率。
摘要由CSDN通过智能技术生成

欢迎订阅本专栏:《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],[
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值