Pytorch入门基础知识

入门

张量

具有一个轴的张量对应数学上的向量(vector)
具有两个轴的张量对应数学上的矩阵(matrix)
具有两个轴以上的张量没有特殊的数学名称
张量中的每个值都称为张量的元素(element)

import torch
#创建一个行向量,默认创建为整数,也可以指定创建类型为浮点数
x = torch.arange(12)

#输出x为:
#tensor([0,1,2,3,4,5,6,7,8,9,10,11])
#输出x的形状,即可以通过shape属性来访问张量(沿每个轴的长度)的形状
x.shape
#输出为:
# torch.Size([12]) 

如果只想知道张量中元素的总数,即形状的所有元素乘积,可以检查它的大小(size),因为这里在处理的是一个向量,所以它的shape 和它的size 相同。

x.numel()
#输出结果为:
#12

要想改变一个张量的形状而不改变元素数量和元素值,可以调用reshape函数。如将张量x从形状为12的行向量转换为形状为(3,4)的矩阵

X = x.reshape(3,4)
X
#输出为:
#tensor([[0,1,2,3],
#				[4,5,6,7],
#				[8,9,10,11]])

不指定高度或宽度时,可以通过-1来调用自动计算维度的功能,即:

x.reshape(-1,4)
x.reshape(3,-1)
x.reshape(3,4)

上述三种表述方式等价

#创建一个形状为(2,3,4)的张量,其中所有元素都设置为0
torch.zeros((2,3,4))
#输出为:
# tensor([[[0.,0.,0.,0.],
#           [0.,0.,0.,0.],
#           [0.,0.,0.,0.]],
#          [[0.,0.,0.,0.],
#           [0.,0.,0.,0.],
#				   [0.,0.,0.,0.]]])
#创建一个形状为(2,3,4)的张量,其中所有元素都设置为1
torch.ones((2,3,4))
#输出为:
# tensor([[[1.,1.,1.,1.],
#           [1.,1.,1.,1.],
#           [1.,1.,1.,1.]],
#          [[1.,1.,1.,1.],
#           [1.,1.,1.,1.],
#				   [1.,1.,1.,1.]]])
#以下代码创建一个形状为(3,4)的张量。其中的每个元素都从均值为0、标准差为1的标准高斯分布(正态
#分布)中随机采样
torch.randn(3, 4)
#输出为:
#tensor([[-0.0135, 0.0665, 0.0912, 0.3212],
#			 [ 1.4653, 0.1843,-1.6995,-0.3036],
#			 [ 1.7646, 1.0450, 0.2457,-0.7732]])

x = torch.tensor([1.0, 2, 4, 8])
y = torch.tensor([2, 2, 2, 2])
x + y, x - y, x * y, x / y, x ** y # **运算符是求幂运算
#输出为:
#(tensor([ 3., 4., 6., 10.]),
#tensor([-1., 0., 2., 6.]),
#tensor([ 2., 4., 8., 16.]),
#tensor([0.5000, 1.0000, 2.0000, 4.0000]),
#tensor([ 1., 4., 16., 64.]))
#“按元素”方式可以应用更多的计算,包括像求幂这样的一元运算符。
torch.exp(x)
#输出为:
#tensor([2.7183e+00, 7.3891e+00, 5.4598e+01, 2.9810e+03])

可以把多个张量连结(concatenate)在一起,当沿行(轴‐0,形状的第一个元素)和按列(轴‐1,形状的第二个元素)连结两个矩阵时,会发生什么情况。我们可以看到,第一个输出张量的轴‐0长度(6)是两个输入张量轴‐0长度的总和(3 + 3);第二个输出张量的轴‐1长度(8)是两个输入张量轴‐1长度的总和(4 + 4)。

X = torch.arange(12, dtype=torch.float32).reshape((3,4))
Y = torch.tensor([[2.0, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
torch.cat((X, Y), dim=0), torch.cat((X, Y), dim=1)

输出为:

(tensor([[ 0., 1., 2., 3.],
[ 4., 5., 6., 7.],
[ 8., 9., 10., 11.],
[ 2., 1., 4., 3.],
[ 1., 2., 3., 4.],
[ 4., 3., 2., 1.]]),
tensor([[ 0., 1., 2., 3., 2., 1., 4., 3.],
[ 4., 5., 6., 7., 1., 2., 3., 4.],
[ 8., 9., 10., 11., 4., 3., 2., 1.]]))

有时,我们想通过逻辑运算符构建二元张量。举例:对于每个位置,如果X和Y在该位置相等,则新
张量中相应项的值为1。这意味着逻辑语句X == Y在该位置处为真,否则该位置为0。

X == Y
#tensor([[False, True, False, True],
#				[False, False, False, False],
#				[False, False, False, False]])
#对张量中的所有元素进行求和,会产生一个单元素张量。
X.sum()
#tensor(66.)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值