萌新级深度学习配置环境笔记

以Python、PyCharm和PyTorch为基础

提供了有关搭建深度学习单机平台和准备所需软件的概念性普及

此图片的alt属性为空;文件名为20210724003214508.png
目标环境架构(???图怎么挂了)

开发环境架构:Python深度学习环境

首先要明确 Python编程语言 虚拟环境 虚拟环境管理系统 深度学习框架 软件包管理系统 软件包 集成开发环境 的概念

Python 编程语言

Python是一种解释型语言,它以逐行转换为机器语言的方式运行程序,具有高效的执行效率。Python解释器将源代码转换为字节码,然后将编译好的字节码交给Python虚拟机(PVM)进行执行

在Python中,当首次执行脚本时,会生成.pyc文件,它是经过编译的字节码文件(c代表compiled),存储在pycache目录中。与原始的.py文件相比,加载.pyc文件的速度更快,并且.pyc文件还可以隐藏源代码并在一定程度上防止反编译(在早期版本的Python中,".pyo"文件是作为优化版本的字节码文件存在的。但是,自从Python 3.5版本开始,默认优化级别已经提高,而不再需要单独生成".pyo"文件。优化级别由Python解释器的命令行参数控制,默认情况下启用了最高级别的优化)

如果选择的编程语言是Python,那么无论是tensorflow还是PyTorch,对Python而言,他们都是以Python包的形式存在的,通过导入这些来使用它们提供的深度学习功能

虚拟环境 和 虚拟环境管理系统

虚拟环境是一种用于隔离项目的独立Python环境。它允许在同一台计算机上同时管理多个项目,并确保它们之间的依赖关系不会冲突。虚拟环境管理系统是一组工具和命令,用于创建、激活、切换和删除虚拟环境

软件包管理系统

软件包管理系统是用于安装、管理和升级软件包的工具。对于Python,常用的软件包管理系统包括pip和conda。它们可以帮助轻松地安装第三方库、框架和工具

在上下文中,提到的第三方库、框架和工具指的都是Python包(Python packages)。Python包是一种组织和分发Python代码的方式,它可以包含模块、子包和其他资源文件,以提供特定功能或服务

第三方库是由Python社区开发并提供的可重用代码库,用于在Python项目中实现各种功能。常见的第三方库包括NumPy、Pandas、Matplotlib等

框架是一种提供了基础结构和工具的软件框架,用于开发特定类型的应用程序。在深度学习领域,TensorFlow和PyTorch就是两个流行的深度学习框架

工具是用于辅助开发、调试和测试的实用程序。例如,代码静态分析工具、调试器、性能分析工具等都属于开发工具

这些Python包可以使用软件包管理系统(如pip或conda)来安装、管理和升级它们。通过导入这些,可以在Python项目中轻松地使用它们提供的功能和特性

Anaconda:是一个开源的软件包管理系统环境管理系统,用于安装多个版本的软件包及其依赖关系,并在它们之间轻松切换

集成开发环境

集成开发环境(IDE)是一种提供了多种开发工具和功能的软件,可帮助开发人员在编写代码时提高效率。

PyCharm:是一种Python IDE(Integrated Development Environment,集成开发环境),带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试、语法高亮、项目管理、代码跳转、智能提示、自动完成、单元测试、版本控制。此外,该IDE提供了一些高级功能,以用于支持Django框架下的专业Web开发

深度学习框架

深度学习框架的出现降低了入门的门槛,使得不需要从复杂的神经网络开始编代码,可以根据需要选择已有的模型,通过训练得到模型参数,也可以在已有模型的基础上增加自己的layer,或者是在顶端选择自己需要的分类器和优化算法(比如常用的梯度下降法)

拿Google的TensorFlow举个例子:

Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,TensorFlow为张量从流图的一端流动到另一端计算过程,TensorFlow是将复杂的数据结构传输至人工智能神经网中进行分析和处理过程的系统

当然也正因如此,没有什么框架是完美的,就像一套积木里可能没有你需要的那一种积木,所以不同的框架适用的领域不完全一致。 总的来说深度学习框架提供了一些列的深度学习的组件(对于通用的算法,里面会有实现),当需要使用新的算法的时候就需要用户自己去定义,然后调用深度学习框架的函数接口使用用户自定义的新算法

开始深度学习项目之前,选择一个合适的框架是非常重要的,因为选择一个合适的框架能起到事半功倍的作用。研究者们使用各种不同的框架来达到他们的研究目的,侧面印证出深度学习领域百花齐放。目前(2023)最为流行的深度学习框架有PyTorch 和 TensorFlow

框架名称GitHub源码主要维护方支持的语言特征
TensorFlowGoogleC++/Python/Java/R 等强大的深度学习框架
KerasGooglePython/R适合深度学习入门
Caffe/Caffe2BVLCC++/Python/MatlabCaffe2已并入Pytorch
PyTorchFacebookC/C++/Python广泛应用且易于使用
TheanoUdeMPythonTensorFlow的前身
CNTKMicrosoftC++/Python/C#/.NET/Java/R
MXNetDMLCC++/Python/R等轻量且高效
PaddlePaddleBaiduC++/Python支持OCR等应用
Deeplearning4jEclipseJava/Scala等Java语言的深度学习框架

深度学习框架对比

不同的人,深度学习的框架使用感受是不一样的

不同时期,深度学习的框架排行榜的顺序也不一样

下面列出了 Keras、TensorFlow、PyTorch 和 PaddlePaddle 的主要区别,例如体系结构、功能、编程和各种属性(萌新可以跳过不看):

API级别

Keras 是一个高级 API,可以在 TensorFlow、Theano 或 CNTK 之上运行。它以其快速开发和简单语法而受到关注。TensorFlow 提供了低级和高级 API,而 PyTorch 同样提供了低级和高级 API,如 torch.nn 和 torch.optim。PaddlePaddle 提供了易于使用的 API,支持多种深度学习模型

框架的体系结构和性能

Keras 具有简单、清晰和易读的体系结构。TensorFlow 的使用要求更严格,但它提供了强大的性能和灵活性。PyTorch 的体系结构相对简单,它提供了动态计算图和简洁的 API,在研究领域非常受欢迎。PaddlePaddle 具有良好的可扩展性和分布式训练能力

调试过程

Keras 提供了简化网络调试的工具。然而,在 TensorFlow 中,调试是一个复杂的过程。PyTorch 提供了更灵活的调试功能,可以使用诸如 PyCharm、ipdb 和 PDB 等工具有效地计算神经网络中的操作时间。PaddlePaddle 提供了丰富的调试工具和文档,可以帮助用户快速定位和解决问题。例如,它提供了 VisualDL 工具,可以帮助用户可视化模型训练过程中的各种指标,以便更好地理解模型的行为。

框架的适用性

Keras 在小型数据集上表现出色,并提供快速原型设计和多个后端的扩展性支持。TensorFlow 在目标检测等方面提供了高性能和功能,并可适用于处理大型数据集。PyTorch 由于其灵活性和调试能力而越来越受欢迎,可以在最短的训练时间内进行调整。PaddlePaddle 提供了丰富的预训练模型和模型库,可以帮助用户快速构建和部署深度学习应用

神经网络中框架的性能

PyTorch 具有递归网络的多层和单元级别类。层对象管理输入数据和时间步骤,并表示具有双向属性的 RNN。因此,PyTorch 的网络可以在单元级别提供适当的封装,无需进一步优化。TensorFlow 包含 Dropout 包装、多个 RNN 单元以及实现深度神经网络的单元级别类。Keras 由完全连接层、GRU 和 LSTM 组成,用于创建循环神经网络

总结

  • Keras 是一个高级 API,可以在 TensorFlow、Theano 或 CNTK 之上运行。它以其快速开发和简单语法而受到关注。
  • TensorFlow 是由 Google 开发的深度学习框架,提供了低级和高级 API。它具有强大的性能和灵活性,在目标检测等方面表现出色。
  • PyTorch 是由 Facebook 开发的深度学习框架,提供了低级和高级 API。它具有动态计算图和简洁的 API,在研究领域非常受欢迎。
  • PaddlePaddle 是百度开发的深度学习框架。它提供了易于使用的 API,支持多种深度学习模型,并且具有良好的可扩展性和分布式训练能力。

这些框架各自都有自己的优缺点,选择哪个框架取决于具体的应用需求和个人喜好

ONNX深度学习模型格式

ONNX(Open Neural Network Exchange)是一个开放的深度学习模型格式,它旨在促进不同深度学习框架之间的模型互操作性。它由 Facebook 和 Microsoft 联合开发,目前已经得到了包括 Amazon、IBM、Intel 和 NVIDIA 在内的多家公司的支持

ONNX 不是一个深度学习框架,而是一种用于表示深度学习模型的标准格式。它允许开发人员在不同的深度学习框架之间转换模型,从而更容易地部署和共享模型

许多流行的深度学习框架,包括 TensorFlow、PyTorch、Keras 和 PaddlePaddle,都提供了对 ONNX 格式的支持。这意味着你可以使用这些框架训练模型,然后将模型转换为 ONNX 格式,以便在其他框架中使用

为什么需要虚拟环境

在使用Python语言时,通过pip(pip3)来安装第三方,但是由于pip的特性,系统中只能安装每个的一个版本

但是在实际项目开发中,不同项目可能需要第三方包的不同版本,迫使我们需要根据实际需求不断进行更新或卸载相应的包,而如果我们直接使用本地的Python环境,会导致整体的开发环境相当混乱而不易管理

这时候我们就需要开辟一个独立干净的空间进行开发和部署,虚拟环境可以帮助解决包管理的问题,使得不同项目可以独立使用不同的包版本,避免版本冲突和环境混乱

虚拟环境管理工具

Conda、Virtualenv、Pipenv都是Pyhton包。其次,都是环境管理工具

软件包管理工具

ConConda是一个强大的软件包管理工具,它不仅适用于Python,还支持多种语言,如Python、R、Scala、Java、JavaScript、C/C++和FORTRAN。

Conda通常与Miniconda或Anaconda一起发行,因此安装Conda只需要安装Miniconda或Anaconda即可

Python包

在Python中,程序由包(package)、模块(module)和函数组成。

包是由一系列模块组成的集合,它包含多个Python文件,并且其中必须包含一个名为init.py的文件,用于标识当前文件夹是一个包。模块是处理特定问题的函数和类的集合。

每个Python文件可以被理解为可导入的模块,而包则是由多个Python文件组成的工具箱,用于完成特定任务,例如pip、opencv、wheel、python和numpy等。

通过使用import语句,可以导入模块并使用其中定义的代码、函数和类程序由包(package)、模块(module)和函数组成

包是由一系列模块组成的集合(包含有多个Python文件,同时 含有一个__init__.py文件)

模块是处理某一类问题的函数和类的集合

每一个Python文件可以理解为可导入的模块,包是多个python文件组成的完成特定任务的工具箱,比如pip,opencv,wheel,python,numpy

包必须含有一个__init__.py文件,它用于标识当前文件夹是一个包

Python的程序是由一个个模块组成的。模块把一组相关的函数或代码组织到一个文件中,一个文件即是一个模块

模块由代码、函数和类组成。导入模块使用import语句

集成开发环境

集成开发环境(IDE,Integrated Development Environment)是为提供程序开发环境而设计的应用程序,集成了开发所需的所有工具

一般而言,IDE包括代码编辑器(具有代码补全和自动缩进功能)、编译器、调试器(支持断点和单步执行)以及图形用户界面等工具。

一些常见的Python IDE包括PyCharm、Jupyter、Spyder和Visual Studio等

值得注意的是,PyCharm在加载项目后会自动创建名为.idea的目录,其中.idea目录用于保存项目的相关信息,例如解释器版本和项目包含的文件等

一些其他的概念

API:(Application Programming Interface)= 应用程序编程接口

SDK:(Software Development Kit)= 软件开发工具包。辅助开发某一类软件的相关文档、范例和工具的集合都可以叫做SDK。

把SDK想象成一个虚拟的程序包,在这个程序包中有一份做好的软件功能,这份程序包几乎是全封闭的,只有一个小小接口可以联通外界,这个接口就是API

软件安装

安装软件时其中会涉及到 PATH(系统环境变量)概念。Windows中设置环境变量是全局性的,对所有程序的运行都有影响,比如有些程序如果依赖于另一个Python环境而不是Anaconda提供的Python,就会造成冲突。设置环境变量作用是指定命令搜索路径,在i命令行下面执行命令,它会到PATH变量所指定的路径中查找看是否能找到相应的命令程序

Anaconda 安装

Anaconda指的是一个开源的Python发行版本,其包含了conda、Python等180多个科学包及其依赖项。包含了大量的科学包, 是一个开源的软件包管理系统环境管理系统 。正常安装即可,注意在结束后需要确保:

将以下路径添加到 环境变量 系统变量 Path 之中(如果更改了安装路径,自己对应修改下)