Tensor学习——创建张量及常规操作(创建、切片、索引、转换、维度变换、拼接)

本文详细介绍了PyTorch中张量的各种操作方法,包括张量的创建、类型转换、索引、分片、合并及维度调整等内容,并对张量的运算和广播特性进行了深入解析。

系列文章目录

Numpy学习——创建数组及常规操作(数组创建、切片、维度变换、索引、筛选、判断、广播)
Tensor学习——创建张量及常规操作(创建、切片、索引、转换、维度变换、拼接)
基础学习——numpy与tensor张量的转换
基础学习——关于list、numpy、torch在float和int等数据类型转换方面的总结


前言

近期发现卷积神经网络数据都是tensor类型的,自己浅学习了一下,总结如下。


一、tensor介绍

在实际使用PyTorch的过程中,张量(Tensor)对象是我们操作的基本数据类型。
  很多时候,在我们没有特别明确什么是深度学习计算框架的时候,我们可以把PyTorch简单看成是Python的深度学习第三方库,在PyTorch中定义了适用于深度学习的基本数据结构————张量,以及张量的各类计算。其实也就相当于NumPy中定义的Array和对应的科学计算方法,正是这些基本数据类型和对应的方法函数,为我们进一步在PyTorch上进行深度学习建模提供了基本对象和基本工具。因此,在正式使用PyTorch进行深度学习建模之前,我们需要熟练掌握PyTorch中张量的基本操作方法。
  当然,值得一提的是,张量的概念并非PyTorch独有,目前来看,基本上通用的深度学习框架都拥有张量这一类数据结构,但不同的深度学习框架中张量的定义和使用方法都略有差别。而张量作为数组的衍生概念,其本身的定义和使用方法和NumPy中的Array非常类似,甚至,在复现一些简单的神经网络算法场景中,我们可以直接使用NumPy中的Array来进行操作。当然,此处并不是鼓励大家使用NumPy来进行深度学习,因为毕竟NumPy中的Array只提供了很多基础功能,写简单神经网络尚可,写更加复杂的神经网络则会非常复杂,并且Array数据结构本身也不支持GPU运行,因此无法应对工业场景中复杂神经网络背后的大规模数值运算。但我们需要知道的是,工具的差异只会影响实现层的具体表现,因此,一方面,我们在学习的过程中,不妨对照NumPy中的Array来进行学习,另一方面,我们更需要透过工具的具体功能,来理解和体会背后更深层次的数学原理和算法思想。

二、Tensor(张量)创建及其类型

导入PyTorch包

import torch

torch tensor与NumPy的Array数组创建类似,许多函数是通用的。torch tensor的学习可以借鉴numpy。

1. 通过列表创建张量

t = torch.tensor([1, 2])
# 创建int16整型张量
a = torch.tensor([1.1, 2.7], dtype = torch.int16)
a,t

tensor([1, 2])
tensor([1, 2], dtype=torch.int16)

2. 通过元组创建张量

torch.tensor((1, 2))

tensor([1, 2])

3. 通过数组创建张量

import numpy as np
a = np.array((1, 2))
b = torch.tensor(a)
b

tensor([1, 2], dtype=torch.int32)

4.全0张量

torch.zeros([2, 3])   

tensor([[0., 0., 0.],
[0., 0., 0.]])

5.全1张量

torch.ones([2, 3])

x = torch.tensor([1,2,3])
x.new_ones(5,3)

6.单位矩阵

torch.eye(5)

7.对角矩阵

t = torch.tensor([1, 2])
torch.diag(t)

5.0-1均匀分布的张量

torch.rand(2, 3)

tensor([[0.5625, 0.3668, 0.7759],
[0.7236, 0.7280, 0.1522]])

8.标准正态分布的张量

torch.randn(2, 3)

tensor([[-1.2513, 0.6465, -2.3011],
[ 0.8447, 1.6856, 1.3615]])

9.指定正态分布的张量

torch.normal(2, 3, size = (2, 2))   

tensor([[2.4660, 1.4952],
[6.0202, 0.7525]])

10.整数随机采样结果

torch.randint(1, 10, [2, 4])     

tensor([[5, 8, 8, 3],
[6, 1, 4, 2]])

11.生成数列

torch.arange(5)    # 和range相同
torch.arange(1, 5, 0.5) # 从1到5(左闭右开),每隔0.5取值一个     
torch.linspace(1, 5, 3)  # 从1到5(左右都包含),等距取三个数

tensor([0, 1, 2, 3, 4])
tensor([1.0000, 1.5000, 2.0000, 2.5000, 3.0000, 3.5000, 4.0000, 4.5000])
tensor([1., 3., 5.])

12.生成未初始化的指定形状矩阵(empty)

torch.empty(2, 3)

tensor([[0.0000e+00, 1.7740e+28, 1.8754e+28],
[1.0396e-05, 1.0742e-05, 1.0187e-11]])

13.根据指定形状,填充指定数值

torch.full([2, 4], 2) 

tensor([[2, 2, 2, 2],
[2, 2, 2, 2]])

14. 创建指定形状的

t = torch.tensor([1, 2])
torch.full_like(t, 2)             # 根据t1形状,填充数值2
torch.randint_like(t, 1, 10)
torch.zeros_like(t)
#torch.randn_like(t)   #t为浮点数   

tensor([2, 2])
tensor([4, 8])
tensor([0, 0])
#tensor([1.0909, 0.0379])

三.张量类型转化

1.数据类型转化

和NumPy中array相同,当张量各元素属于不同类型时,系统会自动进行隐式转化。

数据类型 dtype
32bit浮点数 torch.float32或torch.float
64bit浮点数 torch.float64或torch.double
16bit浮点数 torch.float16或torch.half
8bit无符号整数 torch.unit8
8bit有符号整数 torch.int8
16bit有符号整数 torch.int16或torch.short
32bit有符号整数 torch.int32或torch.int
64bit有符号整数 torch.int64或torch.long
布尔型 torch.bool
复数型 torch.complex64
t = torch.tensor([1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Chaoy6565

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值