Pytoch初步学习——使用张量

目录

理解张量:

 命名张量:(存疑)

 张量的元素类型:

使用dtype指定数字类型:

张量的API:

 张量的存储视图:

 张量元数据的大小,偏移量和步长:

 无复制转置 :

高维转置 :

连续张量:


理解张量:

张量(tensor)是一个数组,也就是一种数据结构,它存储了一组数字,这些数字可以用一个索引单独访问,也可以用多个索引访问。

它是一个数据容器。它包含的数据几乎总是数值数据,因此它是数字的容器。

构造1个张量:

import torch   #导入import模块
a = torch.ones(3)   #创建一个大小为3的一维张量,用1.0填充

张量的本质:

Python 列表或数字元组是在内存中单独分配的 Python 对象的集合,如图 3.3 左侧所示。

  PyTorch 张量或 NumPy 数组通常是连续内存块的视图,这些内存块包含未装箱的 C 数字类型, 而不是 Python 对象。如图 3.3 右侧所示。 

points = torch.tensor([4.0, 1.0, 5.0, 3.0, 2.0, 1.0]) 
print(points)

查看张量的形状:

# In: 
points.shape 
# Out: 
torch.Size([3, 2])
使用 zeros() ones() 函数来初始化张量,以元组的形式来指定大小:
# In: 
points = torch.zeros(3, 2) 
points 
# Out: 
tensor([[0., 0.], 
 [0., 0.], 
 [0., 0.]])

 命名张量:(存疑)

使用 rename() 兄弟方法,可以覆盖或删除(通过传入 None )现有名称:
# In: 
img_named = img_t.refine_names(..., 'channels', 'rows', 'columns') 
batch_named = batch_t.refine_names(..., 'channels', 'rows', 'columns') 
print("img named:", img_named.shape, img_named.names) 
print("batch named:", batch_named.shape, batch_named.names) 
# Out: 
img named: torch.Size([3, 5, 5]) ('channels', 'rows', 'columns') 
batch named: torch.Size([2, 3, 5, 5]) (None, 'channels', 'rows', 'columns')

 张量的元素类型:

使用dtype指定数字类型:

 torch.float32 torch.float 32 位浮点数。
 torch.float64 torch.double 64 位双精度浮点数。
 torch.float16 torch.half 16 位半精度浮点数。
 torch.int8 8 位有符号整数。
 torch.uint8 8 位无符号整数。
 torch.int16 torch.short 16 位有符号整数。
 torch.int32 torch.int 32 位有符号整数。
 torch.int64 torch.long 64 位有符号整数。
 torch.bool :布尔型。
张量的默认数据类型是 32 位浮点数。

张量的API:

关于张量以及张量之间的绝大多数操作(也可以称为张量对象的方法)都可以在 torch
模块中找到,如 transpose() 函数。
# In: 
a = torch.ones(3, 2) 
a_t = torch.transpose(a, 0, 1) 
a.shape, a_t.shape 
# Out: 
(torch.Size([3, 2]), torch.Size([2, 3]))

对张量操作按组进行划分:
 
创建操作 用于构造张量的函数,如 ones() from_numpy()
  索引、切片、连接、转换操作 用于改变张量的形状、步长或内容的函数,如 transpose()
  数学操作 通过运算操作张量内容的函数:
  逐点操作 通过对每个元素分别应用一个函数来得到一个新的张量,如 abs()
cos()
  归约操作 通过迭代张量来计算聚合值的函数,如 mean() std() norm()
  比较操作 在张量上计算数字谓词的函数,如 equal() max()
  频谱操作 在频域中进行变换和操作的函数;
  其他操作 作用于向量的特定函数(如 cross() ),或对矩阵进行操作的函数(如 trace() );
 BLAS LAPACK 操作 符合基本线性代数子程序( Basic Linear Algebra Subprogram
BLAS )规范的函数,用于标量、向量—向量、矩阵—向量和矩阵—矩阵操作。
  随机采样 从概率分布中随机生成值的函数,如 randn() normal()
  序列化 保存和加载张量的函数,如 load() save()
  并行化 用于控制并行 CPU 执行的线程数的函数,如 set_num_threads()

 张量的存储视图:

 存储区是由数字数据组成的一维数组,即包含给定类型的数字的连续内存块,例如float(代表32位浮点数)或int64(代表64位整数)。一个pytorch的Tensor实例就是这样一个Storage实例的视图,该实例能够使用偏移量和每个维度的步长对该存储区进行索引。如图:

 

以使用 storage() 访问给定张量的存储区:
# In: 
points = torch.tensor([[4.0, 1.0], [5.0, 3.0], [2.0, 1.0]]) 
print(points.storage()) 
# Out: 
 4.0 
 1.0 
 5.0 
 3.0 
 2.0 
 1.0 
[torch.FloatStorage of size 6]
zero_() 方法将输入的所有元素归零,任何不带下画线的方法都不会改变源张量,而是返回一个新的张量:
# In: 
a = torch.ones(3, 2) 
# In: 
a.zero_() 
print(a)
# Out: 
tensor([[0., 0.], 
 [0., 0.], 
 [0., 0.]])

 张量元数据的大小,偏移量和步长:

大小(在 NumPy 中称之为形状)是一个元组,表示张量在每个维 度上有多少个元素。
偏移量是指存储区中某元素相对张量中的第 1 个元素的索引。
步长是指存储 区中为了获得下一个
元素需要跳过的元素数量。

 无复制转置 :

t() 方法,它是用于二维张量转置的transpose()方法的简写:
# In: 
points = torch.tensor([[4.0, 1.0], [5.0, 3.0], [2.0, 1.0]]) 
points 
# Out: 
tensor([[4., 1.], 
 [5., 3.], 
 [2., 1.]]) 
# In: 
points_t = points.t() 
points_t 
# Out: 
tensor([[4., 5., 2.], 
 [1., 3., 1.]])

高维转置 :

通过指定 2 个维度,即翻转形状和步长,来转置一个多维数组:
# In: 
some_t = torch.ones(3, 4, 5) 
transpose_t = some_t.transpose(0, 2) 
some_t.shape 
# Out: 
torch.Size([3, 4, 5])
# In: 
transpose_t.shape 
# Out: 
torch.Size([5, 4, 3]) 
# In: 
some_t.stride() 
# Out: 
(20, 5, 1) 
# In: 
transpose_t.stride() 
# Out: 
(1, 5, 20)

连续张量:

利用 contiguous() 方法,我们可以通过一个非连续张量得到一个新的连续张量。张量的内容
是一样的,但是步长和存储发生了改变。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值