PyTorch学习笔记——(1)系统性的介绍TyTorch的基本操作

本文详细介绍了PyTorch中的张量操作,包括数据类型检测、创建张量、查看张量形状和维度、索引、维度操作、转置、拼接与拆分以及基本数学运算。涵盖了标量创建、张量初始化、张量的加减乘除、矩阵相乘、广播机制等核心概念。
摘要由CSDN通过智能技术生成

目录

1、基本数据类型

下面和python的数据类型作比较,看看PyTorch的数据类型:

在这里插入图片描述
字符串类型没有对应?于是使用了下面的方法对应,这个自行搜索。

在这里插入图片描述

1.1 PyTorch数据类型:

下图展示了PyTorch的数据类型,需要注意的是CPU和GPU的数据类型是不一样的:
在这里插入图片描述

1.2 如何检测数据类型:

方法一:

a = torch.randn(2, 3) #创建一个正态分布的张量
a.type() # 方法一检测

# 输出:
'torch.FloatTensor'

方法二:

type(a) #这个是python中的

# 输出:
torch.Tensor

方法三:

isinstance(a, torch.FloatTensor)

# 输出:
True

# 将数据放到GPU上:
a = a.cuda()
isinstance(a, torch.cuda.FloatTensor)

#输出:
True

2、创建tensor(张量)

2.1 标量

标量就是我们说的单个数字,这个主要的用途是计算Loss的时候使用。下面看看怎么创建的:

import torch

a = torch.tensor(1.) # 创建了一个标量
a
# 输出:
tensor(1.)

# 看看标量的形状:
a.shape # 或者 a.size()
# 输出:
torch.Size([])

2.2 创建张量

在这里为了不涉及更多的知识,我就先直接把张量理解成了数组或者多维矩阵,以后学习的差不多了,再深入理解。

那如何创建呢?下面来看:

  • (1)使用:torch.tensor([])
    • 注意:使用这个需要加[],不然就成了标量了。另外,我这里默认创建的数据类型是torch.FloatTensor。
import torch

a = torch.tensor([1.]) # 注意有方括号,省略了就成了标量了

a.shape
# 输出:
torch.Size([1])

a.type() # 我这里默认是torch.FloatTensor
# 输出:
'torch.FloatTensor'
  • (2)使用torch.Tensor()
    • 注意:这个大写的Tensor和前面小写的区别是:这个不加[]创建一个随机化的张量,并且括号里的参数是形状;加了[]则表明里面的数据,和tensor一个功能了。
# 情况一:
torch.Tensor(2,3)  # 创建形状为(2, 3)的张量
# 输出:
tensor([[0.0000e+00, 0.0000e+00, 1.4013e-45],
        [0.0000e+00, 1.4013e-45, 0.0000e+00]])

# 情况二:
torch.Tensor([2,3]) # 创建[2,3]这个张量
# 输出:
tensor([2., 3.])
  • (3)torch.FloatTensor()
    • 这个和torch.Tensor类似,只不过指定了类型。
a = torch.FloatTensor(2,3)
a.shape
# 输出:
torch.Size([2, 3])

关于其他类型,和(2)(3)情况差不多,这里就不再赘述了。

2.3 创建特定张量

  • (1)创建全为1的张量:torch.ones()或者torch.ones_like()

例子:

a = torch.ones(2,2)
# 输出:
tensor([[1., 1.],
        [1., 1.]])

torch.ones_like(a) # 就是按a的形状,创造全1的张量
# 输出:
tensor([[1., 1.],
        [1., 1.]])
  • (2)创建全为0的张量:torch.zeros()torch.zeros_like()

例子:

a = torch.zeros(3,2)
# 输出:
tensor([[0., 0.],
        [0., 0.],
        [0., 0.]])
        
torch.zeros_like(a)# 就是按a的形状,创造全0的张量
# 输出:
tensor([[0., 0.],
        [0., 0.],
        [0., 0.]])
  • (3)创建指定数字的张量:torch.full([], num)
    • []里面是指定的形状,num是用哪个数字填充

例子:

torch.full([2,3], 7)
# 输出:
tensor([[7., 7., 7.],
        [7., 7., 7.]])
  • (4)从numpy创建:torch.from_numpy(data)

例子:

data = np.ones(2)
torch.from_numpy(data) # 将numpy的数组类型转换为tensor
# 输出:
tensor([1., 1.], dtype=torch.float64)
  • (5)从list导入:
a = [1,2,3]
torch.tensor(a) # 注意:小写的tensor接受数据,大写的接受shape
# 输出:
tensor([1, 2, 3])
  • (6)生成未初始化的tensor:torch.empty()

例子:

torch.empty(2,3) # 2行3列
# 输出:
tensor([[1.3541e-05, 8.5007e-07, 8.4078e-45],
        [0.0000e+00, 1.4013e-45, 0.0000e+00]])

注意:这个其实就随机初始化了,有时候初始化的值很大或者很小,所以尽量少用。

  • (7)生成序列:arange(),和python的range一样,不赘述。
    例子:
torch.arange(10,1, -1) # 生成从10到1的整数,第三个参数为间隔,-1为倒着来
  • (8)linspace()/logspace()
    • linspace()在一个给定的区间中,将这个区间平均分成几份。
    • logspace()就是开始结束的10次方,然后在这个区间中均匀取点

例子:

torch.linspace(0, 10, 4) # 把1-10平均分成4份了
# 输出:
tensor([ 0.0000,  3.3333,  6.6667, 10.0000])

torch.logspace(0, 10, 5) # 就是开始结束的10次方,然后在这个区间中均匀取点
# 输出:
tensor([1.0000e+00, 3.1623e+02, 1.0000e+05, 3.1623e+07, 1.0000e+10])
  • (9)生成单位矩阵:eye()

例子:

a = torch.eye(3,3) # 3*3单位矩阵
# 输出:
tensor([[1., 0., 0.],
        [0., 1., 0.],
        [0., 0., 1.]])
  • (10)生成从0到n-1的的n个数,然后打乱:torch.randperm(n)

例子:

torch.randperm(9)
# 输出:
tensor([0, 6, 3, 4, 8, 7, 1, 5, 2])

3、查看tensor的形状和维度

(1).size(num)

功能是查看张量的形状。
参数:num指查看第几个维度,缺失默认全部
返回值为张量的形状,从外到内(我指的是[]从外到内)。

例子:

a = torch.randn(2, 3) # 使用正态分布随机初始化2*3列的张量
a.size() # 查看张量的形状,从外到内
# 输出:
torch.Size([2, 3])

a.size(0) # 第0维度的张量大小
# 输出:
2

a.size(1) # 第1维度的张量大小
# 输出:
3

(2).shape

和size()一个效果。

例子:

a = torch.randn(2, 3) # 使用正态分布随机初始化2*3列的张量
a.shape # 和size一个效果
# 输出:
torch.Size([2, 3])

a.shape[0] # 查看第0维度
# 输出:
2

a.shape[1] # 查看第0维度
# 输出:
3

(3).dim

功能:查看张量有几个维度。

例子:

a = torch.randn(2, 3) # 使用正态分布随机初始化2*3列的张量
a.dim
# 输出:
2

4、tensor的索引

  • (1)比如要直接取一个张量里的某个数,直接看例子:
a = torch.randn(4, 3, 28, 28) # 创建了(4,3,28,28)形状的张量
a.shape
# 输出:
torch.Size([4, 3, 28, 28])

# 取第一个维度为0,第二个维度为0&
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值