📜  火炬张量等于 - Python (1)

📅  最后修改于: 2023-12-03 15:11:09.462000             🧑  作者: Mango

火炬张量等于 - Python

PyTorch是深度学习领域的一个重要工具,它提供了高效的张量计算以及灵活的自动微分功能,并且易于使用。

火炬张量(torch.Tensor)

在PyTorch中,主要的数据结构是张量(Tensor),可以看作是一个多维数组。与NumPy数组类似,PyTorch张量支持基本的数学和逻辑运算。不同之处在于,PyTorch张量可以在GPU上加速运算,同时支持自动微分。

要创建一个张量,可以使用torch.Tensor类,或者使用各种工具函数,如torch.zeros、torch.ones、torch.rand等。

import torch

# 从列表中创建张量
a = torch.Tensor([1, 2, 3])

# 创建一个5x5的全0张量
b = torch.zeros(5, 5)

# 创建一个3x3的随机张量
c = torch.rand(3, 3)

print(a)
print(b)
print(c)

输出:

tensor([1., 2., 3.])
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., 0.]])
tensor([[0.7936, 0.2583, 0.9861],
        [0.0253, 0.5982, 0.7258],
        [0.0969, 0.8857, 0.6318]])
张量运算

PyTorch支持各种数学和逻辑运算,例如加、减、乘、除、矩阵乘法、逆矩阵等。

import torch

a = torch.Tensor([1, 2, 3])
b = torch.Tensor([4, 5, 6])

# 张量加法
c = a + b
print(c)

# 张量乘法
d = a * b
print(d)

# 矩阵乘法
e = torch.matmul(torch.rand(3, 4), torch.rand(4, 2))
print(e)

输出:

tensor([5., 7., 9.])
tensor([ 4., 10., 18.])
tensor([[0.6738, 0.6781],
        [0.7636, 0.5769],
        [0.8269, 0.9568]])
自动微分

自动微分是深度学习中一个非常重要的概念,可以方便地计算目标函数对各个参数的梯度,从而实现反向传播算法。PyTorch提供了灵活的自动微分功能,可以通过torch.autograd模块实现。

import torch

x = torch.tensor([1., 2., 3.], requires_grad=True)
y = torch.tensor([4., 5., 6.], requires_grad=True)

# 定义目标函数z
z = torch.sum(x * y)

# 计算梯度
z.backward()

print(x.grad)
print(y.grad)

输出:

tensor([4., 5., 6.])
tensor([1., 2., 3.])
支持GPU加速

PyTorch支持在GPU上加速张量计算,可以大大提高计算速度。

import torch

# 检查是否支持GPU加速
if torch.cuda.is_available():
    # 创建一个在GPU上的张量
    a = torch.ones(5, 5).cuda()
    b = torch.ones(5, 5).cuda()

    # 在GPU上计算
    c = a + b

    # 将结果传回CPU
    c = c.cpu()

    print(c)
else:
    print("CUDA is not available")

输出:

tensor([[2., 2., 2., 2., 2.],
        [2., 2., 2., 2., 2.],
        [2., 2., 2., 2., 2.],
        [2., 2., 2., 2., 2.],
        [2., 2., 2., 2., 2.]])

总之,PyTorch提供了丰富的张量操作和自动微分功能,可以方便地进行各种深度学习任务。并且支持GPU加速,可以大大提高计算速度。