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

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数组创建。

python 复制代码
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)
python 复制代码
# 默认数据类型 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())

运行结果:

python 复制代码
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)。

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

1.3 Tensor的运算

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

python 复制代码
# 算术运算
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]
python 复制代码
矩阵乘法运行结果
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=1∑mAik×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的所有元素。

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

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

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

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

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

相关推荐
科技互联.2 分钟前
2026年5月观察:四大头部工具如何重塑短视频矩阵的“生产规则”
大数据·人工智能·矩阵
智象科技2 分钟前
智能运维(AIOps),正在改变IT行业格局
运维·人工智能·运维开发·devops·智能运维
数据门徒3 分钟前
神经网络原理 第五章:径向基函数网络
网络·人工智能·神经网络
2301_783848654 分钟前
如何在UI中高亮显示近三天更新过的数据行_时间差高亮规则
jvm·数据库·python
TG_yunshuguoji6 分钟前
阿里云代理商:DeepSeek V4 在阿里云部署的经济性革命
人工智能·阿里云·云计算·ai智能体·deepseek v4
一切皆是因缘际会8 分钟前
2026年AGI突围:自主智能体驱动,数字生命从架构落地到自我迭代全解析
人工智能·深度学习·机器学习·架构·系统架构·agi
Mr数据杨9 分钟前
【CanMV K210】音频实验 I2S 数字麦克风与 FFT 频谱可视化
人工智能·音视频·硬件开发·canmv k210
国产电子元器件10 分钟前
ACS758国产替代方案有哪些?工程师如何选择霍尔电流传感器
人工智能
努力学习_小白11 分钟前
SE注意力机制——学习记录
pytorch·python·深度学习
u01102251212 分钟前
JavaScript中Tree-shaking失效的场景及其优化对策
jvm·数据库·python