PyTorch入门 (1)环境搭建、神经网络普及和Torch基础知识

admin 2025年2月5日23:55:03评论5 views字数 8624阅读28分44秒阅读模式

2024年4月28日是Eastmount的安全星球 —— 『网络攻防和AI安全之家』正式创建和运营的日子,并且已坚持5个月每周7更。该星球目前主营业务为 安全零基础答疑、安全技术分享、AI安全技术分享、AI安全论文交流、威胁情报每日推送、网络攻防技术总结、系统安全技术实战、面试求职、安全考研考博、简历修改及润色、学术交流及答疑、人脉触达、认知提升等。下面是星球的新人券,欢迎新老博友和朋友加入,一起分享更多安全知识,比较良心的星球,非常适合初学者和换安全专业的读者学习。

PyTorch入门 (1)环境搭建、神经网络普及和Torch基础知识

感谢读者2024年对本公众号的支持。新的一年继续分享干货,共同进步,感恩同行 ^_^

前面我们的Python人工智能主要以TensorFlow和Keras为主,而现在最主流的深度学习框架是PyTorch。结合读者建议和个人爱好,接下来我们将分享PoTorch入门文章。这篇文章将介绍PyTorch入门知识,希望对初学者有所帮助。

此外,前面几篇文章通过学习莫烦老师视频并结合自身实践案例来深入分析,推荐大家学习莫老师的分享,后续将以各类案例进行实战。基础性文章,希望对您有帮助,如果存在错误或不足之处,还请海涵。且看且珍惜!

  • https://study.163.com/course/courseLearn.htm?courseId=1003885021

PyTorch入门 (1)环境搭建、神经网络普及和Torch基础知识

文章目录:

  • 一.为什么选PyTorch

  • 二.PyTorch、TensorFlow和Keras

    • 1.Tensorflow

    • 2.PyTorch

    • 3.Keras

  • 三.PyTorch安装及入门示例

    • 1.安装介绍

    • 2.安装过程

  • 四.白话神经网络

  • 五.对比Torch和Numpy

  • 六.总结

本专栏主要结合作者之前的博客、AI经验和相关视频及论文介绍,后面随着深入会讲解更多的Python人工智能案例及应用。作为人工智能的菜鸟,希望大家能与我在这一笔一划的博客中成长起来。如果有问题随时私聊我,只望您能从这个系列中学到知识,一起加油喔~

  • Keras下载地址:https://github.com/eastmountyxz/AI-for-Keras

  • TensorFlow下载地址:https://github.com/eastmountyxz/AI-for-TensorFlow

一.为什么选PyTorch

PyTorch是一个开源的Python深度学习库,由Facebook人工智能研究院(FAIR)在2017年1月基于Torch推出。它既可以看作加入了GPU支持的numpy,又可以看成一个拥有自动求导功能的深度神经网络。PyTorch提供了强大的GPU加速的张量计算和包含自动求导系统的深度神经网络,使得研究人员和开发者能够更快速、更灵活地构建和训练深度学习模型。

PyTorch入门 (1)环境搭建、神经网络普及和Torch基础知识

下面给出莫言老师的描述:

  • PyTorch是比较新的神经网络模块,是Torch在Python上的衍生。因为Torch是一个使用Lua语言的神经网络库,Torch很好用,但是Lua又不是特别流行,所有开发团队将Lua的Torch移植到了更流行的语言Python上。是的,PyTorch 一出生就引来了剧烈的反响。

为什么PyTorch如此受欢迎呢?
很简单,我们先看看有谁在用PyTorch 吧。由上图可见,著名的Facebook、Twitter、NVIDIA、CMU等都在使用它,这就说明PyTorch的确是好用的,而且是值得推广的。而且如果您知道Numpy,PyTorch说它就是在神经网络领域可以用来替换Numpy的模块。

PyTorch入门 (1)环境搭建、神经网络普及和Torch基础知识

那么,为什么作者最近才分享PyTorch呢?
因为作者最初学习深度学习时,PyTorch仅支持Linux和OSX操作系统,而作者更喜欢在Windows上进行编程,因此最终选择了Theano、TensorFlow到Keras的学习路线。随着PyTorch的流行以及读者的需求,作者接下来将陆续分享PyTorch的案例代码,其本质和Keras也类似。

PyTorch入门 (1)环境搭建、神经网络普及和Torch基础知识

二.PyTorch、TensorFlow和Keras

接下来,我们分别介绍PyTorch、TensorFlow和Keras的优缺点,并且引入GPT给出代表性的描述。

Tensorflow Keras 和 PyTorch是迄今为止最受欢迎的两个主要机器学习库。TensorFlow由谷歌团队开发,于 2015 年发布。而PyTorch则由 Facebook的团队开发,并于2017年在GitHub上开源。

PyTorch、TensorFlow和Keras作为当前深度学习领域最受欢迎的三个框架,各自具有其独特的优点和缺点。以下是对这三个框架的学术语言描述及其优缺点分析,并解释为什么PyTorch在某些方面比其他框架更受欢迎。

PyTorch入门 (1)环境搭建、神经网络普及和Torch基础知识

1.Tensorflow

优点:

  • 高度灵活

    TensorFlow提供了底层的操作和控制,可以对模型的细节进行精确调整和优化。

  • 强大的部署能力

    TensorFlow支持多种平台,包括移动设备、嵌入式系统和分布式环境,提供了广泛的部署选项。

  • 大型社区和生态系统

    TensorFlow拥有庞大的用户和开发者社区,提供了丰富的文档、教程和资源。

缺点:

  • 学习曲线陡峭

    TensorFlow的API设计相对复杂,可能需要更多的代码和配置,对于初学者来说可能不太友好。

  • 静态图机制

    与PyTorch的动态图相比,TensorFlow的静态图在某些情况下可能不太灵活。

2.PyTorch

优点:

  • 动态计算图

    PyTorch采用动态计算图的方式,允许在运行时更改图的行为,这使得模型构建更加灵活和易于调试。与TensorFlow等使用静态计算图的框架相比,PyTorch在处理不确定性或复杂性时具有优势。

  • 易用性

    PyTorch的API设计简单直观,易于学习和使用。由于PyTorch与Python的深度集成,Python程序员可以快速上手并进行深度学习任务。此外,PyTorch提供了丰富的文档、教程和示例代码,使得用户能够方便地获取帮助和支持。

  • 易于调试

    由于PyTorch的动态性和Python性质,调试PyTorch程序变得相当直接。用户可以使用Python的标准调试工具,如PDB或PyCharm,直接查看每个操作的结果和中间变量的状态。

  • 强大的社区支持

    PyTorch拥有一个活跃的社区,提供了大量的资源、教程和代码示例。用户可以在官方论坛、GitHub、Stack Overflow等平台上找到大量的PyTorch用户和开发者,从而获取大量的帮助和支持。

  • 高效的GPU利用

    PyTorch可以非常高效地利用NVIDIA的CUDA库来进行GPU计算,支持多GPU分布式训练,加速深度学习模型的训练速度。

  • 广泛的预训练模型

    PyTorch提供了大量的预训练模型,包括但不限于ResNet、VGG、Inception、SqueezeNet、EfficientNet等,这些预训练模型可以帮助用户快速开始新的项目。

需要注意的是,PyTorch虽然具有诸多优势,但也存在一些缺点。

  • 性能相对较低

    与TensorFlow等使用静态图的框架相比,PyTorch在处理大规模数据时可能表现出较低的性能。

  • 部署复杂

    将PyTorch模型部署到生产环境可能需要进行模型转换和优化,这增加了部署的复杂性。

  • 缺乏成熟的模型库以及Python依赖

    最早与一些竞争对手相比,缺乏部分库,当前比较完善。此外,对于不熟悉Python的用户来说,学习和使用PyTorch可能会有一定的门槛。

然而,这些缺点并未阻止PyTorch在深度学习领域中的广泛应用和受欢迎程度。

3.Keras

优点:

  • 简单易用

    Keras提供了简洁的API,使得用户可以轻松地构建、训练和测试神经网络模型。

  • 灵活性

    Keras支持多种深度学习模型,包括序贯式模型、函数式模型和子类化模型。

  • 支持多种后端

    Keras可以在TensorFlow、Theano和CNTK等后端引擎上运行,提供了广泛的兼容性。

缺点:

  • 性能相对较低

    与底层深度学习框架相比,Keras在处理大规模数据和复杂模型时可能表现出较低的性能。

  • 功能相对有限

    在某些高级功能和特性上,Keras可能不如PyTorch和TensorFlow等深度学习框架强大。

为什么PyTorch比其他框架好?
虽然TensorFlow和Keras都有其独特的优点,但PyTorch在某些方面表现出更好的性能。首先,PyTorch的动态图机制使得模型开发和调试更加灵活和直观,这对于研究人员和开发者来说非常重要。其次,PyTorch的Pythonic编程风格使得代码编写更加自然,易于学习和使用。

此外,PyTorch的GPU支持强大,能够充分利用GPU进行加速,提高模型的训练速度。最后,PyTorch拥有庞大的开源社区,提供了丰富的文档、教程和示例代码,这为用户提供了广泛的支持和资源。因此,对于初学者和寻求灵活性和易用性的研究人员来说,PyTorch可能是一个更好的选择。

PyTorch入门 (1)环境搭建、神经网络普及和Torch基础知识

Tensorflow能更有效地处理一些问题,比如说RNN变化时间长度的输出。而莫老师认为:

  • 各家有各家的优势和劣势,所以我们要以中立的态度,两者都是大公司,Tensorflow自己说自己在分布式训练上下了很大的功夫,那就默认Tensorflow在这一点上要超出PyTorch,但是Tensorflow的静态计算图使得它在RNN上有一点点被动(虽然它用其他途径解决了),不过用PyTorch的时候,你会对这种动态的RNN有更好的理解,更好地诠释神经网络的功能。

  • PyTorch搭建图的时候,它不是先建好一个静态的流程图,然后再把数据放到流程图中计算,而是边输入数据边搭建图,是一个动态的过程。

  • Tensorflow的高度工业化,它的底层代码你是看不懂的。PyTorch好那么一点点,如果你深入API,你至少能比看Tensorflow多看懂一点点PyTorch的底层在干嘛。

最后的建议就是:
如果你是学生、随便选一个学,或者稍稍偏向 PvTorch,因为写代码的时候应该更好理解懂了一个模块,转换 Tensorflow 或者其他的模块都好说。如果是上班了,跟着你公司来,公司用什么,你就用什么,不要脱群。

三.PyTorch安装及入门示例

1.安装介绍

PyTorch的安装非常容易,通过官网可以看到安装过程,如下图所示:

  • https://pytorch.org/

PyTorch入门 (1)环境搭建、神经网络普及和Torch基础知识

PyTorch通过高维表示我们的信息,然后在GET STARTED中选择对应的版本。

  • https://pytorch.org/get-started/locally/

GET STARTED:Select preferences and run the command to install PyTorch locally, or get started quickly with one of the supported cloud platforms.

如下图所示,选择对应的版本,包括操作系统、安装包、编程语言、是否GPU加速等。注意,作者当时学习的时候PyTorch还不支持Windows系统,因此选择了TensorFlow和Keras。

PyTorch入门 (1)环境搭建、神经网络普及和Torch基础知识

安装命令如下,它除了安装了PyTorch主模块,还安装了torchvision(数据库和预训练好的模型和网络)。

  • pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu

如果读者需要GPU,选择对应的即可。

PyTorch入门 (1)环境搭建、神经网络普及和Torch基础知识

2.安装过程

接下来是作者电脑上的安装过程。首先,找到Python安装目录的Scripts位置。

PyTorch入门 (1)环境搭建、神经网络普及和Torch基础知识

再打开CMD并输入先前的安装命令。

  • pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu

PyTorch入门 (1)环境搭建、神经网络普及和Torch基础知识

安装过程如下所示:

PyTorch入门 (1)环境搭建、神经网络普及和Torch基础知识

最后通过pip list可以看到已成功安装。

PyTorch入门 (1)环境搭建、神经网络普及和Torch基础知识

四.白话神经网络

该部分还是有必要再给大家普及一遍,参考"莫烦大神"网易云课程对神经网络的介绍,讲得清晰透彻,推荐大家阅读。开始吧!让我们一起进入神经网络和TensorFlow的世界。

PyTorch入门 (1)环境搭建、神经网络普及和Torch基础知识

首先,什么是神经网络(Neural Networks)?
计算机神经网络是一种模仿生物神经网络或动物神经中枢,特别是大脑的结构和功能,它是一种数学模型或计算机模型。神经网络由大量的神经元连接并进行计算,大多数情况下人工神经网络能在外界信息的基础上改变内部结构,是一种自适应的过程。

现代神经网络是一种基于传统统计学建模的工具,常用来对输入和输出间复杂的关系进行建模,或探索数据间的模式,神经网络是一种运算模型,有大量的节点或神经元及其联系构成。和人类的神经元一样,它们负责传递信息和加工信息,神经元也能被训练或强化,形成固定的神经形态,对特殊的信息有更强烈的反应。

PyTorch入门 (1)环境搭建、神经网络普及和Torch基础知识

神经网络是如何工作的呢?
如上图所示,不管这是一只跳跃飞奔的猫,或是一只静静思考的猫,你都知道它是一只猫,因为你的大脑已经被告知过圆眼睛、毛茸茸、尖耳朵的就是猫,你通过成熟的视觉神经系统判断它是猫。计算机也是一样,通过不断的训练,告诉哪些是猫、哪些是狗、哪些是猪,它们会通过数学模型来概括这些学习的判断,最终以数学的形式(0或1)来分类。目前,谷歌、百度图片搜索都能清晰识别事物,这些都归功于计算机神经系统的飞速发展。

神经网络系统由多层神经层构成,为了区分不同的神经层,我们分为:

  • 输入层:直接接收信息的神经层,比如接收一张猫的图片

  • 输出层:信息在神经元中传递中转和分析权衡,形成输出结果,通过该层输出的结果可以看出计算机对事物的认知

  • 隐藏层:在输入和输出层之间的众多神经元连接组成的各个层面,可以有多层,负责对传入信息的加工处理,经过多层加工才能衍生出对认知的理解

PyTorch入门 (1)环境搭建、神经网络普及和Torch基础知识

神经网络举例说明
如下图所示,通常来说,计算机处理的东西和人类有所不同,无论是声音、图片还是文字,它们都只能以数字0或1出现在计算机神经网络里。神经网络看到的图片其实都是一堆数字,对数字的加工处理最终生成另一堆数字,并且具有一定认知上的意义,通过一点点的处理能够得知计算机到底判断这张图片是猫还是狗。

PyTorch入门 (1)环境搭建、神经网络普及和Torch基础知识

计算机是怎么训练的呢?
首先,需要很多的数据,比如需要计算机判断是猫还是狗,就需要准备上千万张有标记的图片,然后再进行上千万次的训练。计算机通过训练或强化学习判断猫,将获取的特征转换为数学的形式。

PyTorch入门 (1)环境搭建、神经网络普及和Torch基础知识

我们需要做的就是只给计算机看图片,然后让它给我们一个不成熟也不准确的答案,有可能100次答案中有10%是正确的。如果给计算机看图片是一张飞奔的猫(如下图),但计算机可能识别成一条狗,尽管它识别错误,但这个错误对计算机是非常有价值的,可以用这次错误的经验作为一名好老师,不断学习经验。

PyTorch入门 (1)环境搭建、神经网络普及和Torch基础知识

那么计算机是如何学习经验的呢?
它是通过对比预测答案和真实答案的差别,然后把这种差别再反向传递回去,修改神经元的权重,让每个神经元向正确的方向改动一点点,这样到下次识别时,通过所有改进的神经网络,计算机识别的正确率会有所提高。最终每一次的一点点,累加上千万次的训练,就会朝正确的方向上迈出一大步。

PyTorch入门 (1)环境搭建、神经网络普及和Torch基础知识

最后到验收结果的时候,给计算机再次显示猫的图片时,它就能正确预测这是一只猫。

PyTorch入门 (1)环境搭建、神经网络普及和Torch基础知识

激励函数是什么东东?
接着再进一步看看神经网络是怎么训练的。原来在计算机里每一个神经元都有属于它的激励函数(Active Function),我们可以利用这些激励函数给计算机一个刺激行为。当我们第一次给计算机看一只飞奔的猫时,神经网络中只有部分神经元被激活或激励,被激活传递下去的信息是计算机最为重视的信息,也是对输出结果最有价值的信息。

PyTorch入门 (1)环境搭建、神经网络普及和Torch基础知识

如果预测的结果是一只狗,所有神经元的参数就会被调整,这时有一些容易被激活的神经元就会变得迟钝,而另一些会变得敏感起来,这就说明了所有神经元参数正在被修改,变得对图片真正重要的信息敏感,从而被改动的参数就能渐渐预测出正确的答案,它就是一只猫。这就是神经网络的加工过程。

PyTorch入门 (1)环境搭建、神经网络普及和Torch基础知识

五.对比Torch和Numpy

该部分主要通过对比Torch和Numpy基础知识,方便大家了解PyTorch。Numpy是处理数据的模块,处理各种矩阵的形式来多核加速运算。

Torch自称为神经网络界的Numpy,因为它能将torch产生的tensor(张量)放在 GPU 中加速运算(前提是你有合适的 GPU),就像Numpy会把array放在CPU中加速运算。所以神经网络的话,当然是用Torch的tensor形式数据最好,就像Tensorflow当中的tensor一样。

当然,我们对Numpy还是爱不释手的,因为我们太习惯numpy的形式了。不过torch看出来我们的喜爱,他把torch做的和numpy能很好的兼容。

下面来看如何自由地转换numpy array和torch tensor。

import torchimport numpy as np#定义np_data = np.arange(6).reshape((2,3))torch_data = torch.from_numpy(np_data)print("numpy:n", np_data)print("torch:n", torch_data)tensor2array = torch_data.numpy()print("tensor2array:n", tensor2array, "n")

其运行结果如下所示:

PyTorch入门 (1)环境搭建、神经网络普及和Torch基础知识

接着介绍PyTorch的各种运算符号。 

可以通过如下网站看到各种运算符号,方便大家学习。

  • https://pytorch.org/docs/stable/torch.html#math-operations

PyTorch入门 (1)环境搭建、神经网络普及和Torch基础知识

PyTorch入门 (1)环境搭建、神经网络普及和Torch基础知识

import torchimport numpy as np#absdata = [-1, -2, 1, 2]tensor = torch.FloatTensor(data)    #32bitprint("numpy:", np.abs(data))       #[1 2 1 2]print("torch:", torch.abs(tensor))  #[1 2 1 2]print("numpy:", np.sin(data))print("torch:", torch.sin(tensor))print("numpy:", np.mean(data))print("torch:", torch.mean(tensor), "n")

运算结果如下所示:

PyTorch入门 (1)环境搭建、神经网络普及和Torch基础知识

最后介绍矩阵运算。矩阵相乘在Numpy中可以使用np.matmul和dot实现,但Torch的dot会将矩阵展平,其输出结果为9。

import torchimport numpy as np#矩阵data = [[1,2], [3,4]]tensor = torch.FloatTensor(data)    #32bit floating pointdata = np.array(data)print("numpy:", data.dot(data))print("torch:", torch.mm(tensor, tensor))A = torch.tensor([1, 1, 1])B = torch.tensor([2, 3, 4])print("torch:", torch.dot(A, B))print("torch:", torch.mul(A, B))

输出结果如下图所示:

PyTorch入门 (1)环境搭建、神经网络普及和Torch基础知识

注意:pytorch0.3之后,tensor.dot()方法进行了更新,只能对1维的tensor进行点成运算

矩阵计算如下所示:

PyTorch入门 (1)环境搭建、神经网络普及和Torch基础知识

在深度学习中,我们通常需要训练一个模型来最小化损失函数。这个过程可以通过梯度下降等优化算法来实现。梯度是函数在某一点上的变化率,可以告诉我们如何调整模型的参数以使损失函数最小化。自动求导是一种计算梯度的技术,它允许我们在定义模型时不需要手动推导梯度计算公式。PyTorch 提供了自动求导的功能,使得梯度的计算变得非常简单和高效。下面给出一段示例代码:

import torch# 创建一个变量x = torch.tensor(1., requires_grad=True)# 执行一些操作y = x ** 2# 反向传播y.backward()# 输出结果print(x.grad)  # 输出x相对于自身的梯度,即2*x

在这个例子中,我们首先创建了一个变量x,并设置了requires_grad=True以启用自动求导。然后我们计算了x的平方y,接着调用backward()方法进行反向传播,这将自动计算y相对于创建时所用操作(这里是乘法操作)的梯度,并将梯度结果存储在x.grad中。

六.总结

写到这里,这篇基础文章就介绍完毕,希望对您有所帮助!再次感谢莫烦老师,后续作者会在该基础上进行深度学习案例扩展。

『网络攻防和AI安全之家』目前收到了很多博友、朋友和老师的支持和点赞,并且保持每周七次更新,尤其是一些看了我文章多年的老粉,购买来感谢,真的很感动,类目。未来,我将分享更多高质量文章,更多安全干货,真心帮助到大家。虽然起步晚,但贵在坚持,像十多年如一日的博客分享那样,脚踏实地,只争朝夕。继续加油,再次感谢!

PyTorch入门 (1)环境搭建、神经网络普及和Torch基础知识

(By:Eastmount 2025-02-04 夜于贵州)

参考文献:

  • [1] 作者前文

  • [2] 莫烦老师视频,推荐大家学习
    – 
    https://study.163.com/course/courseLearn.htm?courseId=1003885021

原文始发于微信公众号(娜璋AI安全之家):PyTorch入门 (1)环境搭建、神经网络普及和Torch基础知识

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年2月5日23:55:03
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   PyTorch入门 (1)环境搭建、神经网络普及和Torch基础知识https://cn-sec.com/archives/3698969.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息