📅  最后修改于: 2023-12-03 14:46:48.489000             🧑  作者: Mango
PyTorch是一个基于Python的科学计算包,其中最重要的一个功能就是支持张量运算。张量运算是深度学习中最基础的操作,PyTorch为此提供了许多强大的操作和函数。
我们可以使用torch.Tensor()
方法来创建张量,这个方法可以接受多种不同的数据类型,比如list,tuple,numpy数组等等。以下是一些示例:
import torch
# 从list创建张量
a = torch.Tensor([1, 2, 3, 4, 5])
print(a)
# 从元组创建张量
b = torch.Tensor((1, 2, 3, 4, 5))
print(b)
# 从numpy数组创建张量
import numpy as np
c = np.array([1, 2, 3, 4, 5])
d = torch.Tensor(c)
print(d)
以上代码将输出:
tensor([1., 2., 3., 4., 5.])
tensor([1., 2., 3., 4., 5.])
tensor([1., 2., 3., 4., 5.])
在创建张量时,我们还可以指定张量的形状、数据类型等参数。例如,以下代码创建了一个形状为(2, 3)、数据类型为浮点数的张量:
e = torch.zeros((2, 3), dtype=torch.float32)
print(e)
以上代码将输出:
tensor([[0., 0., 0.],
[0., 0., 0.]])
PyTorch支持多种对张量进行形状变换的操作。其中最常用的是reshape()
方法,它可以将张量变换为指定的形状:
import torch
a = torch.Tensor([[1, 2], [3, 4], [5, 6]])
print(a.reshape((2, 3)))
以上代码将输出:
tensor([[1., 2., 3.],
[4., 5., 6.]])
在进行形状变换时,我们还可以使用view()
方法,它与reshape()
方法的功能类似,但是速度更快。以下是一个使用view()
方法进行形状变换的示例:
import torch
a = torch.Tensor([[1, 2], [3, 4], [5, 6]])
print(a.view((2, 3)))
以上代码将输出:
tensor([[1., 2., 3.],
[4., 5., 6.]])
PyTorch支持多种对张量进行运算的操作,包括加减乘除、矩阵乘法、逐元素乘法等等。这些操作可以通过使用PyTorch提供的各种函数或者运算符来实现。
以下是一些示例:
import torch
# 加法
a = torch.Tensor([1, 2, 3])
b = torch.Tensor([4, 5, 6])
print(torch.add(a, b))
print(a + b)
# 逐元素乘法
c = torch.Tensor([1, 2, 3])
d = torch.Tensor([4, 5, 6])
print(torch.mul(c, d))
print(c * d)
# 矩阵乘法
e = torch.Tensor([[1, 2], [3, 4]])
f = torch.Tensor([[5, 6], [7, 8]])
print(torch.matmul(e, f))
print(e @ f)
以上代码将输出:
tensor([5., 7., 9.])
tensor([5., 7., 9.])
tensor([ 4., 10., 18.])
tensor([ 4., 10., 18.])
tensor([[19., 22.],
[43., 50.]])
tensor([[19., 22.],
[43., 50.]])
当我们对不同形状的张量进行运算时,PyTorch会自动执行广播操作,以满足运算的需求。
以下是一个广播操作的示例:
import torch
a = torch.Tensor([[1, 2, 3], [4, 5, 6]])
b = torch.Tensor([10, 20, 30])
print(a + b)
以上代码将输出:
tensor([[11., 22., 33.],
[14., 25., 36.]])
在这个示例中,我们对形状为(2,3)的张量a和形状为(3,)的张量b进行加法运算。在进行运算时,PyTorch自动将b扩展为形状为(1,3)的张量,然后再将其广播到形状为(2,3)的张量a上。
PyTorch支持多种对张量进行转换的操作,比如将张量转换为numpy数组,或者将其转换为GPU张量等等。
以下是一些示例:
import torch
import numpy as np
# 将张量转换为numpy数组
a = torch.Tensor([1, 2, 3])
b = a.numpy()
print(b)
# 将numpy数组转换为张量
c = np.array([1, 2, 3])
d = torch.from_numpy(c)
print(d)
# 将张量转换为GPU张量
e = torch.Tensor([1, 2, 3])
f = e.cuda()
print(f)
以上代码将输出:
[1. 2. 3.]
tensor([1, 2, 3])
tensor([1., 2., 3.], device='cuda:0')
到此为止,我们已经介绍了PyTorch中的一些重要的张量运算。当然,这些操作只是冰山一角,PyTorch还提供了更多更强大的操作,我们可以在实际的深度学习中逐渐掌握和应用它们。