首页 > 其他分享 >PyTorch~Tensor

PyTorch~Tensor

时间:2024-08-31 11:23:46浏览次数:6  
标签:tensor 运算 numpy torch PyTorch 计算 grad Tensor

为什么深度学习中要用Tensor,而不是直接用 numpy?

发现很多人没有说到重点,首先,数学上的 tensor 和编程上的(pytorch)内的 tensor 是两个概念。数学上的 tensor 是用来研究高维矩阵之间的一些表达方式和运算性质的(比如高维空间的度量如何更加通用的定义),pytorch 里面的 tensor 是一个数据结构,不严谨且不恰当地讲,这个 class 是 numpy 的 np.ndarray 的子类。

请阁下备好红茶,然后回答我这么几个问题,当然我也附上了答案。

深度学习框架最重要的是什么?答:是自动求导系统。

为什么要自动求导系统?答:因为目前的损失函数的优化方法全都基于一阶梯度信息进行梯度下降。

如何实现梯度的计算?答:计算图。

因此,pytorch 的 tensor 和 numpy 最大的区别在于当你使用 tensor 进行加减乘除运算时,torch 后台会自动帮你构建出计算图,当你计算完成后,通过运算结果的 backward 函数反向传播后,你就可以得到一路上所有 requires_grad=True 的 tensor 的梯度了(必须是叶子节点)。因为这个过程中,每个 tensor 是计算图上的一个节点,在 HPC 或者 infra 工程师的语境中,我们更喜欢用 node 而非 tensor 来描述参与运算的单元。

具体的内部原理可以看我之前写的专栏,2024年了,计算图技术已经不是什么高深技术了:

K的深度学习框架
www.zhihu.com/column/c_1486851133511995393

用代码演示就是这个样子的,比如我们计算一个标量乘法的运算:

PyTorch~Tensor_深度学习

PyTorch~Tensor_深度学习_02

import torch

a = torch.tensor(1., requires_grad=True)
b = torch.tensor(2., requires_grad=True)
c = a * b

c.backward()

print(a.grad)
print(b.grad)

PyTorch~Tensor_深度学习_03

那么回到最初的问题,tensor 和 numpy 的区别是什么?主要在于两点:

  1. tensor 在运算时会构建计算图,numpy 不会。

PyTorch~Tensor_深度学习_04

当然,你说我用 tensor 就是进行普通矩阵运算,不要什么计算图,可以吗?当然可以,你套上一个 no_grad() 的 上下文就 bingo 了:

with torch.no_grad():
    # 此上下文中将不会生成计算图

反向计算很废的 =_=,不仅要把 grad_fn 一个个写出来,你还得考虑该死的广播运算呀,运算溢出如何处理呀。我开发自动求导系统时最怕遇到指数函数了。。。

最后多提一句,除了上面的不同外,pytorch 的 tensor 的基础运算在底层也做了一点点的优化。具体表现为,在 CPU 上,比较大的三维数组的计算(比如爱因斯坦乘),tensor 的速度显著优于 numpy。可以看我曾经给 CT 的 FBP 算法进行优化加速的博客:

kirigaya.cn/blog/article

而且 torch 的 tensor 还可以吃到 intel 的 mkldnn 驱动或者 nvidia 的 cuda 驱动的红利。这些都是一些数值计算上的优化差异了。

至于为什么这个领域的数组被叫成了 张量 tensor,楼上 酱紫君 的回答已经说得很到位了。毕竟,你们懂的,人们总是需要通过附庸风雅或者叶公好龙之为来弥补自己脆弱的认同感和安全感。MBTI 这种廉价的人格量表技术能如此流行也是大抵如此。

标签:tensor,运算,numpy,torch,PyTorch,计算,grad,Tensor
From: https://blog.51cto.com/whaosoft/11882427

相关文章

  • 数据分析新维度:TensorFlow在数据探索中的应用
    数据分析新维度:TensorFlow在数据探索中的应用在数据科学领域,TensorFlow作为Google开发的开源机器学习框架,不仅在深度学习领域大放异彩,其数据分析能力同样不容小觑。本文将深入探讨如何使用TensorFlow进行数据分析,包括数据预处理、探索性数据分析和可视化,并通过代码示例展示......
  • PyTorch深度学习实战(26)—— PyTorch与Multi-GPU
    当拥有多块GPU时,可以利用分布式计算(DistributedComputation)与并行计算(ParallelComputation)的方式加速网络的训练过程。在这里,分布式是指有多个GPU在多台服务器上,并行指一台服务器上的多个GPU。在工作环境中,使用这两种方式加速模型训练是非常重要的技能。本文将介绍PyTorch中......
  • TensorFlow Lite
    TensorFlowLitehttps://tensorflow.google.cn/lite DeploymachinelearningmodelsonmobileandedgedevicesTensorFlowLiteisamobilelibraryfordeployingmodelsonmobile,microcontrollersandotheredgedevices. TensorFlowLite  TensorFlow......
  • 深度学习-pytorch-nerual network价格预测-004
    #1.导入相关模块importtorchfromtorch.utils.dataimportTensorDatasetfromtorch.utils.dataimportDataLoaderimporttorch.nnasnnimporttorch.optimasoptimfromsklearn.datasetsimportmake_regressionfromsklearn.model_selectionimporttrain_test_spli......
  • Pytorch 中的 优化器
    1.介绍torch.optim是PyTorch库中的一个优化器模块,用于实现各种优化算法。优化器模块提供了一系列优化算法,如随机梯度下降(SGD)、Adam、Adagrad等。这些优化算法用于调整神经网络的权重和学习率,以最小化损失函数。通过优化算法,可以帮助神经网络更快地收敛到最优解,提高训练效......
  • Pytorch 的 损失函数
    1.损失函数损失函数(LossFunction)是用来衡量模型预测结果与真实值之间的差异的函数。它是训练过程中最重要的组成部分之一,用来指导模型的优化过程。 作用损失函数的作用包括:衡量模型性能:通过计算预测结果与真实值的差异,损失函数可以提供一个衡量模型预测准确性的指标......
  • Pytorch 中的 Sequential
    1.介绍在PyTorch中,Sequential是一个模型容器。它是一个用于顺序排列神经网络模块(如层、激活函数等)的容器。通过使用Sequential,可以将多个模块按照顺序连接在一起,构建一个深度神经网络模型。使用Sequential时,可以将每个模块按照顺序添加到Sequential容器中。每个模块都可以......
  • 从零开始的PyTorch【03】:优化你的神经网络模型
    从零开始的PyTorch【03】:优化你的神经网络模型前言欢迎回到PyTorch学习系列的第三篇!在前两篇文章中,我们学习了如何构建一个简单的神经网络并训练它,同时探索了数据集调整对模型性能的影响。今天,我们将深入探讨如何优化你的神经网络模型,使其在更复杂的任务中表现更好。我们......
  • 每天五分钟深度学习框架pytorch:nn.Module和nn.function的区别
    本文重点前面我们学习了神经网络工具箱nn.Module,本节课程我们学习一下nn.function,我们可以暂时这样认为,基本上nn.Module所能够完成的任务,nn.function基本上都可以完成,也就是它们两个是重复的,但是它们两个还是有很大的区别,这里我们简单的进行一下介绍。nn.Module和nn.func......
  • 并行动力:用PyTorch在多GPU上释放深度学习潜能
    标题:并行动力:用PyTorch在多GPU上释放深度学习潜能随着深度学习模型变得越来越复杂,单GPU训练往往难以满足需求。幸运的是,PyTorch提供了强大的多GPU训练支持,允许我们利用多个GPU来加速模型的训练过程。本文将详细介绍如何在PyTorch中使用多GPU训练,包括数据并行、模型并行以及......