Pytorch深度学习入门之Tensor

Tensor是Pytorch中进行数据存储和运算的基本单元。Tensor之于Pytorch,相当于Array之于NumPy。实际上,Pytorch将Numpy的Array包装成Tensor,为其定义了各式各样的运算方法和函数。

# 2.基本创建方法
import torch
x = torch.Tensor(2,4) # 构建2x4的矩阵
print(x)
print(x.type()) # 返回变量类型
print(x.dtype) # 输出dtype类型
# 首先创建一个2x3x4的64位浮点数Tensor
y = torch.DoubleTensor(2,3,4) # 2个3x4的矩阵构成
print(y)
# 传入list对其尽心那个初始化
list = [[1,2,3],[4,5,6],[7,8,9]]
print(torch.Tensor(list))
# 通过Python索引的方式来获取Tensor中的元素值
x = torch.Tensor([[2,4,5],[7,6,3]])
print(x[0][2])
# 通过索引方式修改Tensor中的元素
x[0][2] = 9
print(x[0][2])
print(x)
# 3.快速创建方法
# torch.zeros()函数,用于创建元素全为0的Tensor。示例如下:
list1 = torch.zeros(2,4)
print(list1)

# torch.eye()函数:用于创建对角线位置元素全为1,其他位置为0的Tensor。
list2 = torch.eye(5)
list3 = torch.eye(3)
print(list2)
print(list3)
# torch.eye()函数:用于创建元素全为1。
list4 = torch.ones(2,4)
print(list4)
# torch.rang()用于创建将元素初始化为[0,1)的随机数的Tensor
list5 = torch.rand(2,4)
print(list5)
# torch.arange()函数:用于创建一个在区间内指定步长递增的一维Tensor,
# 前两个参数指定区间范围,第三个参数指定步长,示例如下:
print(torch.arange(1,4))
print(torch.arange(1,4,0.5))



下面是Tensor数据类型表格

关于其他的创建方法,见表格:

4.常用数学操作

在Pytorch官方文档上,Tensor的数学操作方法有90多种,表2-3列举了比较常用的25种数学操作方法(除线性代数运算意外)

# Tensor的数学操作的实现方法一般有两种:第一种是直接用Tensor实例调用数学操作方法
# 第二种是使用torch库的方法。比如在进行加法操作前,先初始化两个形状相同的Tensor。
a = torch.Tensor([[1,2,3],[4,5,6]])
b = torch.ones(2,3)
print(a)
print(b)
# 第一种操作方法
print(b.add(a))
# 第二种假发操作
print(torch.add(a,b))
# 此外,如果数学操作函数带有下划线,返回值将覆盖对象,如:
print("---")
print(b.add_(a))
print(a)
print(b)

# 除了可以实现两个相同形状的Tensor相加外,还可以让Tensor种的每一个元素都加上同一个标量

a = torch.rand(3)
print(a)
print(a+2)
print(torch.add(a,2))
print(a.add(2))
# 得到的结果是一致的。
# 介绍完加法,下面介绍四种常用的数学操作。
# abs() 方法 :返回Tensor中每个元素值的绝对值。
import torch
a = torch.Tensor([[-5,-4,-3],[-3,-2,-1]])
a_ = torch.abs(a)
print(f"取绝对值:{a_}")
# ceil()方法:对Tensor中的每个元素向上取整。
b = torch.Tensor([0.2,1.5,3.4])
b_ = torch.ceil(b)
print(f"向上取整:{+b_}")
# exp()方法:返回Tensor中每个元素的以e为底的指数。
c = torch.Tensor([1,2,3,4])
c_ = torch.exp(c)
print(f"返回以e为底的指数:{+c_}")
# max()方法:返回Tensor中所有元素的最大值。
d = torch.Tensor([0.2,1.5,3.4])
d_ = torch.max(b)
print(f"返回元素的最大值:{+d_}")

# 5.线性代数运算
# torch除了基本的数学操作外,还包含了约12种线性代数的相关函数。接下来简单介绍三种运算
a = torch.Tensor([1,2,3])
b = torch.Tensor([1,2,3])
c = torch.dot(a,b)
print(c) # trnsor(14.)
# torch.mv()函数实现矩阵与向量的乘法
a = torch.Tensor([[1,2,3],[2,3,4],[3,4,5]])
b = torch.Tensor([1,2,3])
c = torch.mv(a,b)
print(c)
# torch.mm()函数将两个矩阵相乘
a = torch.Tensor([[1,2,3],[2,3,4],[3,4,5]])
b = torch.Tensor([[2,3,4],[3,4,5],[4,5,6]])
c = torch.mm(a,b)
print(c)
# 连接和切片
# 首先使用rand()函数随机初始化两个形状为2x2的Tensor
a = torch.rand(2,2)
b = torch.rand(2,2)
# cat()函数需要传入两个参数:第一个参数是需要进行连接的所有Tensor组成的元组
# 第二个参数是连接的维度
print(torch.cat((a,b),0)) # 进行连接
print(torch.cat((a,b),1)) # 进行拼接
# 如何使用torch.chunk()函数将Tensor沿某维度进行切片
# 需要传入的第一个参数为被切片的Tensor对象
# 第二个参数为切分的块数
# 第三个参数为切分的维度
c = torch.rand(2,4)
print(c)
# 下面我们将张量c按第二个维度切分为两块
print(torch.chunk(c,2,1))
# torch.t()函数求转置矩阵,该函数只适合二维的Tensor
a = torch.rand(2,2)
print(a)
print(torch.t(a))

 

import torch
'''
view()函数可以改变Tensor的形状,在卷积层和全连接层中,
我们时常将高维的Tensor转化为一维的Tensor,就是view()完成的
'''
x = torch.rand(2,3,4)
print(x)
print(x.size())
y = x.view(2,12)
print(y)
print(y.size())
# 当使用-1作为view()函数的参数时,代表该维度数目自动计算。
# 下面的代码表示我们确定第二维1,第一维自动计算
z = x.view(-1,1)
print(z.size())
print(z)
# CUDA计算
import torch
# 向前传播
x = torch.ones(2)
print(x)
print(x.requires_grad)

x.requires_grad = True
print(x.requires_grad)
print(x.grad)
print(x.grad_fn)

z = x * 4
print(z)
# 用norm()函数求z的长度得到y
y = z.norm()
print(y)
# 反向传播
# 初始化矩阵X和向量z,并将矩阵与向量相乘,得到形状为2*1的向量y
z = torch.ones(2,1)
x = torch.Tensor([[2,3],[1,2]])
x.requires_grad = True
y = x.mm(z)
print(y)
# 此时调用backward()函数时,需要传入一个形状与y的形状一样且元素全为1的向量
y.backward(torch.ones(2,1))
print(x.grad) # 思考......

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

XF鸭

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

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

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

打赏作者

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

抵扣说明:

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

余额充值