【PyTorch Tensor】PyTorch Tensor编程教学:基础与实战

发布于:2024-03-29 ⋅ 阅读:(25) ⋅ 点赞:(0)

PyTorch是一个开源的机器学习库,它提供了强大的张量计算(Tensor computation)能力和动态计算图(Dynamic computation graph),使得深度学习模型的构建和训练变得更加灵活和直观。在本文中,我们将通过一些基础的例子来学习PyTorch中的Tensor编程。
官网网站中文学习网站:中文pytorch 教程学习网站

1. PyTorch中的Tensor

Tensor是PyTorch中的基本数据结构,它可以看作是一个高维数组或矩阵。与NumPy的ndarray类似,Tensor也支持多种数值运算。但是,与ndarray不同的是,Tensor可以在GPU上运行,这使得计算速度大大提升。

1.1 创建Tensor

首先,让我们来学习如何创建一个Tensor。PyTorch提供了多种方式来创建Tensor,例如,从Python列表或NumPy数组创建。

import torch
# 从Python列表创建Tensor
tensor_from_list = torch.tensor([1, 2, 3, 4])
# 从NumPy数组创建Tensor
import numpy as np
numpy_array = np.array([1, 2, 3, 4])
tensor_from_numpy = torch.from_numpy(numpy_array)
# 创建一个全零的Tensor
zero_tensor = torch.zeros(4)
# 创建一个全一的Tensor
one_tensor = torch.ones(4)
# 创建一个形状为(2, 3)的未初始化的Tensor
uninitialized_tensor = torch.empty(2, 3)
# 创建一个形状为(2, 3)且值在[0, 1)区间均匀分布的Tensor
uniform_tensor = torch.rand(2, 3)
# 创建一个形状为(2, 3)且值服从标准正态分布的Tensor
normal_tensor = torch.randn(2, 3)
# 默认数据类型 32位浮点数
a=torch.Tensor([[1,2,3],[4,5,6],[7,8,9]])
print(a)
print(a.type())

# 指定数据类型64位浮点数
b=torch.DoubleTensor([[1,2,3],[4,5,6],[7,8,9]])
print(b)
print(b.type())

# 指定数据类型16位整型
c=torch.ShortTensor([[1,2,3],[4,5,6],[7,8,9]])
print(c)
print(c.type())

# 指定数据类型32位整型
d=torch.IntTensor([[1,2,3],[4,5,6],[7,8,9]])
print(d)
print(d.type())

# 指定数据类型64位整型
e=torch.LongTensor([[1,2,3],[4,5,6],[7,8,9]])
print(e)
print(e.type())

运行结果:

tensor([[1., 2., 3.],
        [4., 5., 6.],
        [7., 8., 9.]])
torch.FloatTensor
tensor([[1., 2., 3.],
        [4., 5., 6.],
        [7., 8., 9.]], dtype=torch.float64)
torch.DoubleTensor
tensor([[1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]], dtype=torch.int16)
torch.ShortTensor
tensor([[1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]], dtype=torch.int32)
torch.IntTensor
tensor([[1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]])
torch.LongTensor

1.2 Tensor的基本属性

每个Tensor都有一些基本的属性,如形状(shape)、数据类型(dtype)和设备(device)。

# 查看Tensor的形状
print(tensor_from_list.shape)
# 查看Tensor的数据类型
print(tensor_from_list.dtype)
# 查看Tensor所在的设备
print(tensor_from_list.device)

1.3 Tensor的运算

PyTorch支持丰富的Tensor运算,包括算术运算、矩阵运算、索引和切片等。

# 算术运算
a = torch.tensor([1, 2, 3])
b = torch.tensor([4, 5, 6])
add_result = a + b
sub_result = a - b
mul_result = a * b
div_result = a / b
# 矩阵运算
mat1 = torch.tensor([[1, 2], [3, 4]])
mat2 = torch.tensor([[5, 6], [7, 8]])
matmul_result = torch.matmul(mat1, mat2)
# 索引和切片
tensor = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
first_row = tensor[0]
first_column = tensor[:, 0]
last_element = tensor[-1, -1]
矩阵乘法运行结果
tensor([[19, 22],
        [43, 50]])

二维矩阵乘法是一种基本的线性代数运算,用于计算两个矩阵相乘的结果。矩阵乘法遵循特定的规则,其中矩阵A和矩阵B的乘积矩阵C可以通过以下方式计算:
C i j = ∑ k = 1 m A i k × B k j C_{ij} = \sum_{k=1}^{m} A_{ik} \times B_{kj} Cij=k=1mAik×Bkj
其中, C C C是结果矩阵, A A A B B B是乘积矩阵的输入矩阵, i i i j j j是矩阵C的行和列索引, k k k是矩阵A和矩阵B的列索引。
下面是一个简单的例子来说明二维矩阵乘法的计算过程:
假设我们有两个矩阵:
A = [ 1 2 3 4 ] A = \begin{bmatrix} 1 & 2 \\ 3 & 4 \\ \end{bmatrix} A=[1324]

B = [ 5 6 7 8 ] B = \begin{bmatrix} 5 & 6 \\ 7 & 8 \\ \end{bmatrix} B=[5768]
我们想要计算矩阵A和矩阵B的乘积矩阵C。
首先,我们按照上述公式计算每个元素 C i j C_{ij} Cij
C 11 = A 11 × B 11 + A 12 × B 21 = 1 × 5 + 2 × 7 = 5 + 14 = 19 C_{11} = A_{11} \times B_{11} + A_{12} \times B_{21} = 1 \times 5 + 2 \times 7 = 5 + 14 = 19 C11=A11×B11+A12×B21=1×5+2×7=5+14=19
C 12 = A 11 × B 12 + A 12 × B 22 = 1 × 6 + 2 × 8 = 6 + 16 = 22 C_{12} = A_{11} \times B_{12} + A_{12} \times B_{22} = 1 \times 6 + 2 \times 8 = 6 + 16 = 22 C12=A11×B12+A12×B22=1×6+2×8=6+16=22
C 21 = A 21 × B 11 + A 22 × B 21 = 3 × 5 + 4 × 7 = 15 + 28 = 43 C_{21} = A_{21} \times B_{11} + A_{22} \times B_{21} = 3 \times 5 + 4 \times 7 = 15 + 28 = 43 C21=A21×B11+A22×B21=3×5+4×7=15+28=43
C 22 = A 21 × B 12 + A 22 × B 22 = 3 × 6 + 4 × 8 = 18 + 32 = 50 C_{22} = A_{21} \times B_{12} + A_{22} \times B_{22} = 3 \times 6 + 4 \times 8 = 18 + 32 = 50 C22=A21×B12+A22×B22=3×6+4×8=18+32=50
因此,矩阵A和矩阵B的乘积矩阵C为:
C = [ 19 22 43 50 ] C = \begin{bmatrix} 19 & 22 \\ 43 & 50 \\ \end{bmatrix} C=[19432250]
在这个例子中,我们首先将矩阵A的第一行与矩阵B的第一列相乘,然后将结果与矩阵B的第二列相乘,最后将这两个结果相加得到矩阵C的第一行第一列的值。我们重复这个过程,计算出矩阵C的所有元素。

# 拼接两个tensor
mat3 = torch.cat([mat1,mat2], 0)
print(mat3)
print(mat3.dtype)

2. 实战:使用Tensor构建线性模型

现在,让我们使用Tensor来构建一个简单的线性模型:y = wx + b。我们将创建一些随机的数据作为输入和权重,然后计算模型的输出。

# 创建随机的输入数据
x = torch.randn(10)
# 创建随机的权重和偏置
w = torch.randn(1)
b = torch.randn(1)
# 计算模型的输出
y = w * x + b

在本文中,我们介绍了PyTorch中Tensor的基本概念和操作。通过这些基础知识和实战例子,您应该能够开始使用PyTorch进行更复杂的深度学习模型构建和训练。记住,实践是最好的学习方式,所以不要害怕犯错,大胆尝试吧!

本文含有隐藏内容,请 开通VIP 后查看