以Python、PyCharm和PyTorch为基础

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

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

构建深度学习项目的第一步是理解 Python 开发环境的基本构成。完整的深度学习开发环境通常由以下几个关键组件组成:虚拟环境虚拟环境管理系统深度学习框架软件包管理系统软件包集成开发环境(IDE)等。了解这些概念及其相互关系,有助于更高效地组织开发流程与管理依赖

Python 编程语言

Python 是一种解释型语言,具有简洁的语法和广泛的生态系统,已成为深度学习开发的主流语言。其执行过程为:源代码(.py 文件)首先被解释器编译为字节码(.pyc 文件),随后由 Python 虚拟机(PVM)执行。字节码文件默认保存在 __pycache__ 文件夹中,可加快加载速度并在一定程度上实现源代码保护。

在 Python 生态中,TensorFlow、PyTorch 等深度学习框架以 Python 包 的形式存在,安装后可通过 import 语句引入并使用其提供的功能模块

虚拟环境与管理系统

虚拟环境是为每个项目构建的隔离运行环境,能避免不同项目之间的依赖冲突。例如,某一项目可能需要 TensorFlow 1.15,而另一个项目使用 TensorFlow 2.x,通过虚拟环境可为两者分别创建独立的依赖环境,互不影响

虚拟环境管理系统是管理这些虚拟环境的工具,常见的有 Python 官方的 venv、社区开发的 virtualenv,以及集成包与环境管理功能的 conda。它们支持环境的创建、激活、切换与删除

软件包与管理系统

软件包是用于扩展 Python 功能的功能模块集合,通常包含若干模块、资源文件和说明文档。大多数功能都来源于第三方软件包,例如用于数值计算的 NumPy,用于数据分析的 Pandas 等

软件包管理系统是用于安装、管理、升级和卸载软件包的工具。在 Python 中,最常用的是 pip(官方工具)和 conda(由 Anaconda 提供)。两者均可用于安装第三方库、深度学习框架或开发工具

  • Matplotlib:用于绘制静态图像,支持折线图、散点图、柱状图、热力图等数据可视化形式
  • OpenCV:支持图像读取、图像增强、边缘检测、轮廓提取等功能,是工业视觉任务中常用的图像处理库
  • Requests:用于简洁地发送 HTTP 请求,适合网页爬取、API 调用等网络交互类任务

软件包管理系统能够大大提升项目开发与环境管理的效率,是 Python 项目开发中的基础工具

深度学习框架

深度学习框架封装了神经网络构建与训练所需的底层操作,简化了模型开发流程。常用的框架包括:

  • TensorFlow:由 Google 提供,支持静态计算图与动态图,适合生产部署和大规模训练。
  • PyTorch:由 Meta 推出,采用动态图机制,语法更贴近 Python 原生风格,适合科研和快速迭代

这些框架均可通过 pip 或 conda 安装,并通过导入其 Python 包进行模型定义、训练与推理

集成开发环境(IDE)

集成开发环境(IDE)是集成代码编辑、项目管理、调试器、终端等工具于一体的开发平台,可显著提高开发效率。常用的 IDE 有:

  • PyCharm:功能强大的 Python IDE,支持智能补全、调试、虚拟环境配置、版本控制等,适合构建中大型深度学习项目
  • Jupyter Notebook:基于 Web 的交互式开发环境,适用于数据分析、可视化与模型实验,常用于教学与快速测试

以上各组件共同构成了完整的 Python 深度学习开发环境。合理组织并理解它们之间的关系,有助于提高项目的可维护性与开发效率

框架的差异与选择

没有哪一个框架是“完美”的——就像一盒乐高积木,某些组件可能缺乏你想要的形状。不同框架各有侧重点,适用于不同的应用场景。深度学习框架本质上提供了构建模型所需的基础组件(如网络层、损失函数、优化器等),对于常见算法通常已有封装,遇到新的算法需求时,则需要用户自行定义模块并结合框架 API 使用

因此,在开始项目之前,选好合适的框架至关重要。一个合适的框架可以大大提升效率,降低开发难度

目前(截至 2023 年),最流行的两个框架是:

框架名称(附 GitHub)主要维护方支持语言特征
TensorFlow
GitHub
GoogleC++ / Python / Java / R 等功能最全面、生态庞大,适合生产部署,学习曲线略陡
Keras
GitHub
GooglePython / R高层封装易上手,适合快速构建和原型设计
Caffe / Caffe2
GitHub / Caffe2
BVLC / FacebookC++ / Python / MatlabCaffe 已停更,Caffe2 并入 PyTorch
PyTorch
GitHub
Meta (Facebook)C / C++ / Python动态计算图灵活好调试,研究与应用两相宜
Theano
GitHub
UdeMPython最早期框架之一,现已停止维护
CNTK
GitHub
MicrosoftC++ / Python / C# / .NET / Java / R微软推出但已停止更新,不建议新项目使用
MXNet
GitHub
Apache (原 DMLC)C++ / Python / R 等支持多语言,高性能,Amazon 支持,略小众
PaddlePaddle
GitHub
百度C++ / Python国内团队主推,工业界应用广,OCR/NLP 支持好
Deeplearning4j
GitHub
EclipseJava / ScalaJVM 平台首选,适合与大数据生态(如 Spark)集成

深度学习框架对比

深度学习框架并没有“最佳选择”,不同人对框架的偏好可能差异很大,不同任务和开发阶段对框架的需求也不尽相同。同时,框架的流行度也会随着时间不断变化

下面我们对目前主流的四个框架 —— Keras、TensorFlow、PyTorch 和 PaddlePaddle —— 从多个维度进行简要比较(初学者可略读):

API 设计

  • Keras 是一个高级 API,原生支持 TensorFlow 后端,也支持 Theano 和 CNTK,语法简洁、开发效率高。
  • TensorFlow 同时提供低级与高级 API,适合从灵活构建到底层控制。
  • PyTorch 提供模块化的 API,例如 torch.nntorch.optim,兼顾灵活性与易用性。
  • PaddlePaddle 提供结构清晰的 API,便于上手,适配各类模型开发需求。

架构与性能

  • Keras:体系结构清晰易懂,适合快速开发和教学。
  • TensorFlow:功能强大,适合构建复杂、可部署的系统。
  • PyTorch:动态计算图、代码风格简洁,广受研究者青睐。
  • PaddlePaddle:具备良好的可扩展性,支持分布式训练,部署能力强。

调试体验

  • Keras:调试友好,开发过程更流畅。
  • TensorFlow:早期版本调试繁琐,新版本(2.x)已改善许多。
  • PyTorch:原生支持动态图,可直接用 Python 工具(如 pdb、PyCharm)调试。
  • PaddlePaddle:提供 VisualDL 等可视化工具,调试与分析能力突出。

应用适用性

  • Keras:适合原型设计与中小型项目。
  • TensorFlow:工业级框架,适合大型模型、部署需求强的项目。
  • PyTorch:灵活、简洁,适用于研究、NLP、CV等多种场景。
  • PaddlePaddle:内置大量预训练模型,尤其适合中文场景,适配 OCR、NLP 等工业场景。

神经网络支持

  • PyTorch:对循环神经网络(RNN)支持灵活,可构建复杂序列模型。
  • TensorFlow:支持多种 RNN 单元,封装程度高,适合工程部署。
  • Keras:支持常用 RNN 结构如 LSTM 和 GRU,适合快速搭建原型。
  • PaddlePaddle:具备丰富的网络组件和良好的模块封装,便于构建各类深度模型。

总结

框架特点简述
Keras高级封装、语法简洁、适合快速开发
TensorFlow工业级框架,灵活强大、部署能力强
PyTorch代码清晰、调试灵活、研究界首选
PaddlePaddle国产框架,适配中文,部署工具链完备

选择哪种框架,取决于你的 项目需求、部署场景个人习惯

ONNX:深度学习模型的中间格式

ONNX(Open Neural Network Exchange) 是一个开放的深度学习模型交换格式,旨在实现不同深度学习框架之间的互操作性。

  • 由 Microsoft 和 Facebook 联合发起
  • 得到 Amazon、Intel、NVIDIA 等大厂支持
  • 本质上是一个“模型通用语言”,不是深度学习框架

ONNX 允许开发者在一个框架中训练模型(如 PyTorch),再导出成 ONNX 格式,在另一个框架中部署(如 TensorRT、OpenVINO、ONNX Runtime),大大提升了模型跨平台部署的自由度

为什么需要虚拟环境?

在 Python 开发中,我们常通过 pip 来安装第三方包,但系统中只能安装每个包的一个版本。如果多个项目依赖于不同版本的同一个库(例如 A 项目需要 numpy==1.23,B 项目需要 numpy==1.19),就容易出现版本冲突,导致项目无法正常运行。

为了解决这个问题,我们引入了 虚拟环境 —— 它能为每个项目创建一个“独立隔离”的 Python 运行环境,互不影响

使用虚拟环境的优势:

  • 不同项目使用不同的库版本,互不干扰
  • 避免污染系统环境,提高稳定性
  • 项目部署更方便(打包更干净)

虚拟环境管理工具对比

工具名特点简述
Virtualenv最基础的虚拟环境管理工具,轻量好用,配合 pip 使用
Conda支持 Python + 多语言环境管理(如 R、C++ 等),集成包管理,适合科学计算场景
Pipenv官方推荐,整合了 pip + virtualenv,支持自动锁定依赖版本
  • 推荐组合:Conda(更全面)或 Virtualenv + pip(更轻量)

Python 包管理工具简介

Python 中的包管理工具主要有两类功能:

  1. 安装/卸载 Python 包(如 pip、conda)
  2. 管理依赖关系和版本(如 pip freeze, pipenv lock)

常见工具介绍:

  • pip:最常用的 Python 包管理工具,可配合 virtualenv 使用
  • conda:集成虚拟环境 + 包管理,适合科学计算类项目
  • poetry:现代化的包管理工具,依赖控制更清晰,适合中大型项目

什么是 Python 包与模块

Python 程序是由 包(Package)模块(Module)函数(Function) 组成的:

概念简要说明
模块一个 .py 文件即为一个模块
包含 __init__.py 的文件夹,表示一个可导入的包
函数封装具体功能的代码块,可在模块或包中定义

举例说明:

my_project/
│
├── utils/                ← 这是一个包(含 __init__.py)
│   ├── __init__.py
│   ├── image_utils.py    ← 模块
│   └── string_utils.py   ← 模块
└── main.py               ← 主程序

导入方式如:

from utils.image_utils import resize_image

GitHub 项目包常见文件与目录说明

  • README.md:项目说明文件,采用 Markdown 格式。通常包含项目简介、功能概览、安装方法、使用示例、作者信息和许可证等内容,是了解项目最重要的入口
  • requirements.txt:依赖列表,列出了项目运行所需的第三方 Python 包及其版本号。可使用 pip install -r requirements.txt 命令自动安装
  • setup.py:项目的安装脚本,定义了包的元信息(如名称、版本、依赖等),用于将项目打包为可分发的 Python 包。部分开源项目中可选
  • .gitignore:Git 忽略配置文件,指定哪些文件/目录在版本控制中应被忽略,如日志、缓存、模型文件等
  • LICENSE:开源许可证,标明该项目的使用与分发权限(如 MIT、Apache 2.0、GPL 等)
  • .github/:GitHub 专用目录,用于存放与项目仓库管理相关的配置文件。常见用途包括:
    • ISSUE_TEMPLATE/PULL_REQUEST_TEMPLATE/:分别用于定义提交 issue(问题)和 pull request(合并请求)时的模板,引导协作者按规范描述问题或改动内容
    • workflows/:用于配置 GitHub Actions 自动化流程,例如自动运行测试、构建模型、部署文档等。文件格式通常为 .yml
    • FUNDING.yml:配置捐赠渠道,如 GitHub Sponsors、Patreon、支付宝等
    • CODEOWNERS:指定不同文件或模块的负责人,便于大型项目协作

常见的集成开发环境(IDE)

集成开发环境(IDE)是将代码编辑器、调试器、终端等工具集成于一体的开发平台,能大幅提升开发效率。常见 Python IDE 如下:

IDE 工具特点简述
PyCharmJetBrains 出品,功能强大,适合构建复杂项目,支持虚拟环境配置、调试、代码补全等
Jupyter Notebook交互式 Notebook,适合快速实验、教学、数据分析等场景
Spyder更偏科学计算领域,支持变量监控、交互式编辑
Visual Studio Code轻量、插件丰富,适合多语言开发,Python 插件生态成熟

小提醒:PyCharm 会在项目根目录自动生成 .idea 文件夹,用于保存项目的解释器设置和文件配置,不建议随意删除。

一些其他核心概念补充

  • API(Application Programming Interface):应用程序编程接口,用于软件间通讯和调用。
  • SDK(Software Development Kit):软件开发工具包,包含文档、代码示例、工具集合等。
  • 类比:SDK 是一个装好功能的工具箱,而 API 是它留下来的“入口开口”。

安装软件时的环境变量(PATH)

在 Windows 中安装软件时,常会遇到“是否加入系统环境变量”的选项。环境变量(特别是 PATH)决定了终端或命令行在运行指令时,到哪里去找可执行程序

例如你安装 Python 后勾选了“添加到环境变量”,就可以直接在命令行中敲 python 来打开解释器,否则会报“找不到命令”。

环境变量配置不当,可能导致多个 Python 环境之间冲突(如 Anaconda 与原生 Python 共存)。

Anaconda 安装

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

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