PyTorch Learning -- Tensor

本文详细介绍了PyTorch中Tensor的创建方法,包括empty(), ones(), zeros(), rand(), randn()等;逐元素操作,比较函数,归并操作如max/min,以及线性代数函数的应用。此外,还探讨了广播机制和Tensor的shape、size()属性以及view()函数在改变Tensor形状中的作用。" 111794746,10296963,STC8G单片机485串口通讯问题:printf函数发送数据异常,"['STC单片机', '串口通讯', '数据传输', '硬件故障', '嵌入式开发']
摘要由CSDN通过智能技术生成

Tensor

1.常见新建tensor的方法:

函数功能
Tensor(*sizes)基础构造函数
tensor(data,)类似np.array的构造函数
ones(*sizes)全1Tensor
zeros(*sizes)全0Tensor
eye(*sizes)对角线为1,其他为0
arange(s,e,step)从s到e,步长为step
linspace(s,e,steps)从s到e,均匀切分成steps份
rand/randn(*sizes)均匀/标准分布
normal(mean,std)/uniform(from,to)正态分布/均匀分布
randperm(m)随机排列
empty(m,n)返回填充有未初始化数据的张量。 张量的形状由可变的参数大小定义

Tensor(*sizes)

基础构造函数创建tensor:

import torch
x = torch.Tensor(3, 4)  # 三行四列的一个tensor
print(x)
y = torch.Tensor([1, 2, 3, 4])  # 指定列表生成的tensor
print(y)

输出:

tensor([[4.1327e-39, 8.9082e-39, 9.8265e-39, 9.4592e-39],
        [1.0561e-38, 1.0653e-38, 1.0469e-38, 9.5510e-39],
        [1.0378e-38, 8.9082e-39, 9.6429e-39, 8.9082e-39]])
tensor([1., 2., 3., 4.])

empty()

创建一个5x3的未初始化的Tensor:

import torch
import numpy as np
x = torch.empty(5, 3)  # 未初始化的Tensor
print(x)

输出:

tensor([[1.0561e-38, 1.0653e-38, 1.0469e-38],
        [9.5510e-39, 1.0745e-38, 9.6429e-39],
        [1.0561e-38, 9.1837e-39, 1.0653e-38],
        [8.4490e-39, 9.6429e-39, 1.0653e-38],
        [9.6429e-39, 1.0745e-38, 9.2755e-39]])

ones(*sizes),zeros(*sizes)

创建全1,全0的tensor:

a = torch.ones(2, 3)
print(a)
b = torch.zeros(2, 3)
print(b)

输出:

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

rand(*sizes),randn(*sizes)

rand(*size)是平均分布,即等概率分布,等概率产生0-1范围内的数。
randn(*size)是标准正态分布,均值为0,标准差为1。

x = torch.rand(5, 3)
y = torch.randn(5, 3)
print(x)
print(y)

输出:

tensor([[0.9491, 0.5622, 0.2050],
        [0.9967, 0.6962, 0.4248],
        [0.0452, 0.7653, 0.3908],
        [0.5554, 0.6158, 0.5598],
        [0.9109, 0.9606, 0.6292]])
tensor([[-0.4479, -0.4878, -0.4781],
        [-0.4787, -0.8743, -0.5941],
        [-0.3610,  0.8012, -1.6010],
        [ 0.1469, -1.8639, -1.6346],
        [ 0.1833, -1.7414,  0.0152]])

2.常见的逐元素操作:

函数功能
abs/sqrt/div/exp/fmod/log/pow…绝对值/平方根/除法/指数/求余/求幂…
cos/sin/asin/atan2/cosh…相关三角函数
ceil/round/floor/trunc上取整/四舍五入/下取整/只保留整数部分
clamp(input, min, max)超过min和max部分截断
sigmod/tanh…激活函数

比较函数中有一些是逐元素比较,操作类似于逐元素操作,还有一些则类似于归并操作。

3.常用的比较函数:

函数功能
gt/lt/ge/le/eq/ne大于/小于/大于等于/小于等于/等于/不等
topk最大的k个数
sort排序
max/min比较两个tensor最大最小值

表中第一行的比较操作已经实现了运算符重载,因此可以使用a>=b、a>b、a!=b、a==b,其返回结果是一个ByteTensor,可用来选取元素。

max/min这两个操作比较特殊,以max来说,它有以下三种使用情况:

torch.max(tensor)  # 返回tensor中最大的一个数
torch.max(tensor,dim)   # 指定维上最大的数,返回tensor和下标
torch.max(tensor1, tensor2)  # 比较两个tensor相比较大的元素

4.归并操作 :

此类操作会使输出形状小于输入形状,并可以沿着某一维度进行指定操作。
如加法sum,既可以计算整个tensor的和,也可以计算tensor中每一行或每一列的和。

函数功能
mean/sum/median/mode均值/和/中位数/众数
norm/dist范数/距离
std/var标准差/方差
cumsum/cumprod累加/累乘

以上大多数函数都有一个参数**dim**,用来指定这些操作是在哪个维度上执行的。关于dim(对应于Numpy中的axis)的解释众说纷纭,这里提供一个简单的记忆方式:

假设输入的形状是(m, n, k)

  • 如果指定dim=0,输出的形状就是(1, n, k)或者(n, k)
  • 如果指定dim=1,输出的形状就是(m, 1, k)或者(m, k)
  • 如果指定dim=2,输出的形状就是(m, n, 1)或者(m, n)

size中是否有"1",取决于参数keepdimkeepdim=True会保留维度1。注意,以上只是经验总结,并非所有函数都符合这种形状变化方式,如cumsum

5.常用的线性代数函数:

函数功能
trace对角线元素之和(矩阵的迹)
diag对角线元素
triu/tril矩阵的上三角/下三角,可指定偏移量
mm/bmm矩阵乘法,batch的矩阵乘法
addmm/addbmm/addmv/addr/badbmm…矩阵运算
t转置
dot/cross内积/外积
inverse求逆矩阵
svd奇异值分解

6.广播机制:

当对两个形状不同的Tensor按元素运算时,可能会触发广播机制:先适当复制元素使这两个Tensor形状相同后再按元素运算。

x = torch.arange(1, 3).view(1, 2)
print(x)
y = torch.arange(1, 4).view(3, 1)
print(y)
print(x + y)

输出:

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

7.Tensor形状:

shape,size()

可以通过shape或者size()来获取Tensor的形状:

x = torch.rand(3, 2)
y = torch.randn(2, 4)
print(x.size())
print(y.shape)

输出:

torch.Size([3, 2])
torch.Size([2, 4])

view()

用view()来改变Tensor的形状:

x = torch.randn(3, 5)
y = x.view(15)
z = x.view(-1, 5)  # -1所指的维度可以根据其他维度的值推出来
print(x.size(), y.size(), z.size())

输出:

torch.Size([3, 5]) torch.Size([15]) torch.Size([3, 5])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值