尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

PyTorch深度学习基础(一):张量 Tensor 与基本数据操作详解

PyTorch深度学习基础(一):张量 Tensor 与基本数据操作详解 本系列目标从零开始学习深度学习基础掌握 PyTorch 编程核心工具为后续学习神经网络、CNN、Transformer、大模型等内容打下基础。在深度学习中我们每天都在处理大量的数据例如图片二维像素矩阵文本词向量序列蛋白质序列氨基酸编码矩阵图结构节点和边的特征矩阵这些数据最终都会被转换为一种统一的数据结构Tensor张量PyTorch 中最核心的数据结构就是 Tensor。本节我们将学习什么是 Tensor如何创建 TensorTensor 的形状和维度Tensor 基本运算广播机制索引与切片内存优化Tensor 与 NumPy 转换1. PyTorch简介PyTorch 是目前最流行的深度学习框架之一由 Meta AI 开发。它提供自动求导机制AutogradGPU 加速计算神经网络模块torch.nn优化算法torch.optim大量深度学习工具安装完成后我们首先导入 PyTorchimporttorch注意虽然框架名字叫PyTorch但是 Python 中导入模块使用torch而不是pytorch2. 什么是Tensor张量Tensor定义Tensor 可以理解为一个包含数字的数据容器是深度学习中存储数据的基本单位。例如标量 Scalar一个数字x5 x 5x5对应torch.tensor(5)向量 Vector一维数组x[1,2,3,4]x \begin{bmatrix}1,2,3,4 \end{bmatrix}x[1,2,3,4​]代码xtorch.tensor([1,2,3,4])矩阵 Matrix二维数组X[1234] X \begin{bmatrix} 12\\ 34 \end{bmatrix}X[13​24​]代码torch.tensor([[1,2],[3,4]])高维Tensor例如图片Height×Width×Channel Height×Width×ChannelHeight×Width×ChannelRGB图片224×224×3 224×224×3224×224×3Batch图片Batch×Channel×Height×Width Batch×Channel×Height×WidthBatch×Channel×Height×Width例如torch.zeros((32,3,224,224))表示32张图片3个颜色通道224×224像素3. 创建Tensor3.1 使用 arange 创建连续数据xtorch.arange(12)print(x)输出tensor([0,1,2,3,4,5,6,7,8,9,10,11])这里生成0,1,2,...,11 0,1,2,...,110,1,2,...,11共12个元素。4. Tensor形状 ShapeTensor 的形状可以通过x.shape查看输出torch.Size([12])表示这是一个长度为12的一维向量。5. Tensor元素数量使用x.numel()输出12numel:number of elements表示Tensor中元素总数量。6. Tensor改变形状 reshape深度学习中经常需要调整数据维度。例如原始[0,1,2,3,4,5,6,7,8,9,10,11]转换为3行4列矩阵Xx.reshape(3,4)print(X)结果tensor([ [0,1,2,3], [4,5,6,7], [8,9,10,11] ])注意reshape不会改变数据只是改变观察方式。7. 自动推断维度 -1例如x.reshape(-1,4)PyTorch 会自动计算第一维是多少。因为$ 12 \div 43 $所以(3,4)等价于x.reshape(3,4)8. 创建特殊Tensor8.1 全零矩阵torch.zeros((2,3,4))表示2个矩阵每个矩阵3行4列结果[ [ [0,0,0,0], [0,0,0,0], [0,0,0,0] ], [ ... ] ]8.2 全1矩阵torch.ones((2,3,4))所有元素xi1 x_i1xi​19. 随机初始化Tensor神经网络参数通常需要随机初始化。例如生成N(0,1) N(0,1)N(0,1)即均值0标准差1代码torch.randn(3,4)输出类似[ [-0.13,0.22,...], [1.32,-0.5,...] ]为什么需要随机初始化因为如果所有神经元参数相同梯度相同学习能力下降所以需要随机打破对称性。10. Tensor数学运算PyTorch支持加法 减法 -乘法 *除法 /幂运算 **例如xtorch.tensor([1.,2,4,8])ytorch.tensor([2.,2,2,2])print(xy)print(x-y)print(x*y)print(x/y)print(x**y)结果加法[3,4,6,10] [3,4,6,10][3,4,6,10]乘法[2,4,8,16] [2,4,8,16][2,4,8,16]11. 指数函数torch.exp(x)计算ex e^xex例如e12.718 e^12.718e12.718在深度学习中Softmaxsoftmax(xi)exi∑exj softmax(x_i) \frac{e^{x_i}} {\sum e^{x_j}}softmax(xi​)∑exj​exi​​就使用指数函数。12. Tensor拼接 concat多个Tensor合并torch.cat()例如两个矩阵Xtorch.arange(12).reshape(3,4)Ytorch.ones((3,4))按行拼接torch.cat((X,Y),dim0)结果形状64 6464按列拼接torch.cat((X,Y),dim1)结果38 383813. Tensor比较运算例如XY返回布尔矩阵True False常用于判断预测是否正确创建mask14. Tensor求和X.sum()例如012...1166 012...1166012...1166输出tensor(66.)15. Tensor广播机制 Broadcasting这是PyTorch非常重要的功能。例如atorch.arange(3).reshape(3,1)btorch.arange(2).reshape(1,2)a:[ [0], [1], [2] ]b:[ [0,1] ]两个形状不同(3,1) (1,2)但是abPyTorch自动扩展a:0 0 1 1 2 2b:0 1 0 1 0 1结果[ [0,1], [1,2], [2,3] ]这就是广播机制16. Tensor索引和切片类似Python列表。获取最后一行X[-1]获取第2~3行X[1:3]修改元素X[1,2]9表示第2行第3列修改整行X[0:2,:]12表示前两行全部设置为12。17. 节省Tensor内存普通操作YYX会创建新的Tensor修改Y引用因此内存增加。使用Y[:]XY可以原地修改。也可以XY减少内存开销。18. Tensor与NumPy转换PyTorchTensorNumPyndarray二者可以互相转换。Tensor → NumPyAX.numpy()NumPy → TensorBtorch.tensor(A)19. Tensor转换Python数字如果Tensor只有一个元素atorch.tensor([3.5])转换a.item()结果3.5也可以float(a)int(a)总结本节学习了PyTorch最核心的数据结构Tensor掌握功能方法创建Tensortorch.tensor生成连续数字torch.arange查看形状shape元素数量numel改变维度reshape全0zeros全1ones随机初始化randn拼接cat求和sum索引[]广播broadcastingNumPy转换numpy()深度学习核心思想神经网络本质上就是输入数据→Tensor→矩阵运算→Tensor→预测结果 输入数据 \rightarrow Tensor \rightarrow 矩阵运算 \rightarrow Tensor \rightarrow 预测结果输入数据→Tensor→矩阵运算→Tensor→预测结果因此掌握 Tensor是学习 PyTorch 和深度学习的第一步。
返回列表