news 2026/9/25 3:59:33

深度学习入门首选?《Python深度学习》第二版精读与Keras实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
深度学习入门首选?《Python深度学习》第二版精读与Keras实战指南

不卖关子了,这篇要聊的就是《Python深度学习》第二版,英文名Deep Learning with Python, Second Edition,作者是Keras 之父 François Chollet。我去年下半年开始用 GPT 把这本书的英文原版重新翻译成中文学习笔记,边翻边跑代码,计划做成一个连载系列。这篇是系列第一篇,先把整本书的内容结构、为什么值得读、GPT 重译这件事怎么做、环境怎么搭、第一个模型怎么跑通,一次性讲清楚。不管你是刚准备入门深度学习的 Python 玩家,还是已经看过第一版想了解第二版更新了什么的老手,都能在这篇里找到对应的信息。

我一直觉得,深度学习入门最难的不是数学,也不是代码,而是“不知道先学什么、学到什么程度算够”。市面上的书要么太理论,要么太工程化,真正能把“讲原理”和“写代码”平衡好的不多。《Python深度学习》第二版恰恰是那种每章都能让你跑起来、同时又让你明白背后在做什么的书。如果你手头有英文 PDF,并且也想用 GPT 辅助阅读,那我的这套重译流程也能直接抄。

1. 这本书为什么值得读:Python深度学习第二版到底新在哪

1.1 从第一版到第二版,变化的不只是封面

第一版中文版我记得是 2018 年前后出的,当时对应的是 Keras 2.x 和 TensorFlow 1.x 的时代。书里大量代码用的是keras.models.Sequential、model.fit这种写法,训练流程和现在差别不大,但底层 API 已经变了不少。第二版出来之后,最直观的变化是代码全部基于 TensorFlow 2 / Keras 2.4+,tf.keras成了主流入口,很多第一版里的小技巧已经被集成到 Keras 本身的 API 里了。

这带来一个很实际的好处:你按第二版敲代码,基本不会遇到“因为框架版本太老而跑不起来”的问题。书里用的layers.Dense、layers.Conv2D、layers.LSTM这些接口,到今天依然是 Keras 的稳定 API。

第二个大变化是内容更新。第二版加入了 Transformer、Vision Transformer(ViT)、神经风格迁移、GAN、VAE 等章节,这些在第一版里是没有的。尤其是 Transformer 那章,放在 2021 年之后看非常及时,因为 GPT、BERT 这些模型的核心都是 Transformer。如果说第一版是“经典深度学习入门”,第二版就是“带你看懂 2017 到 2021 年深度学习最重要的进展”。

第三个变化我认为是最值得说的:第二版大幅强化了“模型背后的原理”部分。它增加了关于过拟合、欠拟合、正则化、Batch Normalization 的深度解释,而且用了大量可视化图表。不是那种“反正你用就完了”的态度,而是尽量告诉你为什么这个设计能 work、什么时候它不 work。

1.2 跟其他深度学习入门资料比,它的位置在哪

我经常被问,深度学习入门到底是看吴恩达的课、李沐的《动手学深度学习》,还是看《Python深度学习》?我的看法是三者的定位不一样:

吴恩达的课程适合完全没有数学基础的人,但它代码偏少,你看了很多原理,真正上手写模型还是会发怵。《动手学深度学习》代码密度高、内容新,但它是 PyTorch 和 MXNet 为主(新版有 PyTorch 和 JAX),对不熟悉 PyTorch 的人来说上手成本不低,而且全书节奏偏快,前几章就开始讲自动求导和反向传播,容易劝退。

《Python深度学习》是三者里代码最“平易近人”的。它全篇用 Keras,你只需要会 Python 基础语法,跟着敲就能出结果。它对数学的要求也最低,基本上不涉及手推梯度,而是用直觉性的图例解释什么是梯度下降、什么是反向传播。如果你是一个“只想快速做出图像分类、文本分类,过程中逐渐理解原理”的人,这本书比另外两本都合适。

我的一个经验是:先快速过这本书建立整体地图感,再去看《动手学深度学习》补细节,或者直接跟着 Hugging Face 的 Transformer 教程跑 NLP 项目,效率比一开始就啃 PyTorch 高很多。这本书最好的用法不是“唯一的一本”,而是“第一本”。

1.3 这本书适合谁,不适合谁

适合的人:

  • 有 Python 基础(会写函数、类、会用列表推导式,不需要懂 NumPy 进阶)
  • 想快速上手图像分类、文本分类、序列预测这些经典任务
  • 想把模型部署到实际项目里,但对底层数学没有执念
  • 想了解 Keras 生态,想用 TensorFlow 做工程的人

不适合的人:

  • 完全不会 Python,建议先去刷一遍 Python 入门教程,否则看书会卡在语法上
  • 想搞懂数学推导、想自己发明新算法、想做研究的人,这本书太浅,你得去补线性代数、概率论、凸优化
  • 已经熟练使用 PyTorch、对模型结构和训练流程已经很熟的人,这本书的收获主要在 Keras API 和工程细节上

我的整体判断是:如果你处于“想学深度学习,但打开 PyTorch 教程之后不知道怎么下手”的阶段,这本书是最好的破局点。它不要求你懂 GPU、不要求你懂分布式训练,一台普通电脑也能跑完大部分章节。

2. 为什么要做GPT重译:机器翻译不是万能,但可以用得更聪明

2.1 中文版已经存在,为什么我还要自己重译一遍

这本书有人民邮电出版社的中文第二版,译者张亮,翻译质量在技术书里算不错的。那我为什么还要用 GPT 重译?

第一,我读技术书有个习惯:遇到关键的术语和段落,会想看到英文原文的精确表达。中文翻译后,很多地方为了通顺,会把原文的“模糊性”处理掉。比如generalization这个词,中文经常译成“泛化”,但英文原文在不同语境下有时强调“对新数据的适应能力”,有时强调“模型没有死记硬背”。这些微妙差别,只看中文版很难察觉。

第二,GPT 翻译的最大优势不是“把英文变成中文”,而是“把英文变成指定风格的中文”。我可以明确要求它保留代码块原样、统一术语翻译、遇到难以直译的句子时给出注释说明。这是传统人工翻译很少能做到的“工业化定制”。

第三,GPT 翻译可以带着上下文。第二版很多长段落是在描述同一张图或同一段代码,如果逐句翻译,前后逻辑容易断掉。我用的是“带前文摘要 + 当前段落”的方式喂给 GPT,它能保持语义连续,翻译结果比逐句翻好得多。

另外说句老实话,自己用 GPT 重译一遍,等于对全书的章节结构、技术栈、内容变化做了逐章精读。这比单纯看中文版留下的印象深得多。

2.2 完整的重译流程:从 PDF 到系列文章要过四道关

我自己跑通的流程大致是这样:

第一步,把英文 PDF 转成文本。我用的工具是pdftotext,命令行一行搞定。转出来之后不是干净的文本,会有页眉页脚、掉格式、公式错位等问题,先要花一晚上清理。

第二步,按章节切块。每章单独存一个 Markdown 文件,代码块用围栏标记,保留原书的图片占位符。这样之后每章翻译时,不会因为文件太大而超出 GPT 的单次输入长度。

第三步,建立术语表。先抽出整本书出现频率最高的术语,比如overfitting统一译作“过拟合”、regularization统一译作“正则化”、dense layer统一译作“全连接层”。这个术语表先喂给 GPT,让它后续翻译时遵守。

第四步,分段翻译。我会把一章再拆成几个小节,每小节一段话发给 GPT,指令模板大概是:

你是《Python深度学习》第二版的中文译者。请将以下英文内容翻译成中文。 要求: 1. 术语统一使用术语表,未覆盖的术语根据上下文自行确定,并在括号内保留英文原文。 2. 代码块内容不要翻译,注释可以翻译。 3. 长句优先拆分,但不要丢失原文信息。 4. 涉及模型结构、参数设置的地方,必须准确还原。 5. 输出 Markdown 格式。

拿到 GPT 的输出后,我再人工校对一遍,重点看术语是否统一、代码缩进是否被破坏、有没有漏译的段落。校对完成的内容,才进入我的连载文章素材库。

这个流程最大的坑在第 3 步和第 5 步之间。GPT 偶尔会在第 4 章记住术语表,到第 8 章又忘掉,把overfitting翻成“过度拟合”,把learning rate翻成“学习速率”。所以我会在每段输入时,再贴一次术语表,靠“重复提醒”来对抗上下文丢失。

2.3 GPT 翻译最容易翻车的地方,我踩过的坑

我翻了一百多个小节之后,总结出几个高频翻车点:

第一个是术语前后不一致。上一段还是“卷积核”,这一段变成“过滤器”,下一段又变“筛选器”。这种情况几乎每章都会出现。解决方法是不要指望 GPT 自己记忆,而是让它每次输出前都查一遍术语表。

第二个是长句翻译成病句。英文技术写作习惯用从句,中文不是。GPT 如果直译,会出现“这是一种通过将输入数据映射到高维空间来使得线性可分的方法”这种让读者读三遍才懂的句子。我遇到这种句子会单独拆出来,要求 GPT 在不丢失信息的前提下重组句子结构。

第三个是代码块被“润色”。GPT 在翻译时,有时会把代码里的变量名也“翻译”掉,比如labels变成“标签”,这在 Python 里会直接报错。我的指令里特别强调:代码标识符保持原样,只翻译注释。

第四个是特殊字符丢失。书里有不少数学符号和希腊字母,转成文本时可能变成乱码。我会在重译时让 GPT 根据上下文补齐,比如λ这种,确认它在代码里对应的是lambda还是正则化系数。

顺带说一句,GPT 本身也是深度学习模型的一种,它的核心是 Transformer 架构。所以这本书的 Transformer 章节对我来说有双重意义:一方面是在学技术,另一方面是在理解自己手里这个翻译工具背后的工作原理,这种感觉挺奇妙的。

3. 从零配好能跑通这本书代码的深度学习环境

3.1 环境版本怎么选:Python、TensorFlow、Keras 三者的关系

先解释一个很多人搞混的关系:Keras 不是 TensorFlow 之外的独立框架。从 TensorFlow 2.0 开始,tf.keras已经成为 TensorFlow 的官方高级 API。你在书里看到的from tensorflow import keras,导入的就是 TensorFlow 自带的 Keras。所以只要装好了 TensorFlow,Keras 就跟着有了。

版本选择上,我建议直接装 TensorFlow 2.13 或更新的稳定版。书里用的是 TensorFlow 2.4 时代的写法,但核心 API 在 2.13 里基本都兼容,只有个别函数有 deprecation warning,不影响训练结果。Python 版本建议 3.9 到 3.11,TensorFlow 在新版本上跑得最稳。不要用 3.12 或更新版本去试,部分旧依赖会编译报错,没必要给自己找麻烦。

GPU 方面,如果电脑是 NVIDIA 显卡、显存 4GB 以上,建议装 GPU 版,训练能快 5 到 10 倍。装法是先装 CUDA 和 cuDNN,再安装tensorflow,它能自动识别 GPU。如果没有 NVIDIA 显卡,直接用 CPU 跑也没问题。这本书的绝大多数例子都不大,CPU 训练最耗时的图像分类任务也就十几分钟,完全能接受。

3.2 Windows、Mac、Linux 下的安装要点

我身边三种系统都有人用,安装方式不太一样。

Windows 上最推荐用 Anaconda 来管理环境。打开 Anaconda Prompt,依次执行:

conda create -n dlwp python=3.10 conda activate dlwp pip install tensorflow jupyter matplotlib numpy pandas scikit-learn

注意不要用conda install tensorflow,conda 源里的 TensorFlow 版本经常滞后,直接用 pip 装最新稳定版更省心。

macOS 分两种情况。Intel 芯片的 Mac 装法和上面一样。Apple Silicon 的 Mac(M1、M2、M3)需要装专门的 TensorFlow 版本,Apple 官方提供tensorflow-macos,但更简单的方式是用tensorflow-metal插件启用 GPU 加速:

pip install tensorflow tensorflow-metal

tensorflow-metal装好之后,Keras 训练会自动调用 MPS(Metal Performance Shaders)后端,效果很明显。但没有这个插件也不影响跑,CPU 模式照样能跑完大多数章节。

Linux 服务器上我一般不用 Anaconda,直接用 venv 加 pip:

python3 -m venv dlwp source dlwp/bin/activate pip install tensorflow jupyter matplotlib numpy pandas scikit-learn

一个共同的大坑是网络。pip install tensorflow这个包大约 200MB 到 500MB,下载慢是常见问题。国内网络环境建议用清华 PyPI 镜像,速度会快很多:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple tensorflow jupyter matplotlib numpy pandas scikit-learn

3.3 用 Jupyter Notebook 跑第一个数字识别模型

书里第二章有一个手写数字识别的完整例子,这是整套书第一个能跑的代码,用的数据集是 MNIST。我想强调一下,MNIST 是深度学习的“Hello World”,你跑通它,就意味着环境基本没问题了。

启动 Jupyter:

jupyter notebook

新建一个 Notebook,输入下面的完整代码:

import tensorflow as tf from tensorflow import keras from tensorflow.keras import layers # 加载 MNIST 数据集 (train_images, train_labels), (test_images, test_labels) = keras.datasets.mnist.load_data() # 归一化:像素值从 0-255 缩放到 0-1 train_images = train_images.astype("float32") / 255.0 test_images = test_images.astype("float32") / 255.0 # 定义模型 model = keras.Sequential([ layers.Flatten(input_shape=(28, 28)), layers.Dense(512, activation="relu"), layers.Dense(10, activation="softmax") ]) # 编译模型 model.compile(optimizer="rmsprop", loss="sparse_categorical_crossentropy", metrics=["accuracy"]) # 训练模型 model.fit(train_images, train_labels, epochs=5, batch_size=128) # 评估模型 test_loss, test_acc = model.evaluate(test_images, test_labels) print(f"test_acc: {test_acc:.4f}")

这段代码做的事情很简单:把 28x28 的图片展平成一维向量,经过一个有 512 个神经元的全连接层,再用 softmax 输出 10 个类别的概率分布。训练 5 个 epoch 之后,测试集准确率通常在 97% 到 98% 之间,全程用 CPU 也能在 2 分钟内跑完。

这里有一个值得多说的细节:loss用的是sparse_categorical_crossentropy,为什么不是categorical_crossentropy?因为train_labels是整数标签(0 到 9),不是 one-hot 编码的向量。如果标签用keras.utils.to_categorical转成 one-hot,才需要换用categorical_crossentropy。这两种 loss 在数学上等价,但输入格式必须匹配。很多人卡在这里报 shape 错误,就是没搞清楚这个区别。

跑通这个例子之后,我建议你马上去书里改几个参数试试,比如把Dense(512)改成Dense(32),看看准确率怎么变;把epochs=5改成epochs=20,看看会不会过拟合。这种“破坏式实验”比单纯按书敲代码印象深得多。

4. 跟着这本书入门踩过的坑:排查实录

4.1 ModuleNotFoundError 和版本不匹配的解决思路

我见过最多的报错就是ModuleNotFoundError: No module named 'tensorflow'和ImportError: cannot import name 'xxx' from 'tensorflow'。

第一种纯粹是环境没装对。用pip list | grep tensorflow看看当前环境有没有 TensorFlow,没有就装。重点是确认你当前的 Python 解释器有没有激活虚拟环境。很多人用 Jupyter Notebook 时会在内核里选错环境,明明 conda 环境里装了,Jupyter 却还在用 base 环境。解决方案是在 conda 环境里先装 ipykernel:

conda install ipykernel python -m ipykernel install --user --name=dlwp --display-name "DLWP"

之后在 Jupyter 右上角切换内核到 DLWP,就没有这个问题了。

第二种报错通常是版本太旧或太新导致的 API 变化。比如书里用的keras.datasets.imdb.load_data(num_words=10000),在旧版 TensorFlow 里是keras.datasets.imdb.load_data(nb_words=10000),参数名变了。遇到这种问题,最快的方式是在搜索框里查官方文档,别自己猜。

4.2 数据集下载失败,别让卡在第一步

这本书用的数据集主要是 MNIST、IMDB 电影评论、CIFAR-10 和 Boston Housing。它们都是 Keras 自带的下载接口,但下载源在国外,网络不稳定时经常会卡在Downloading data from ...这一步,然后报连接超时。

我的解决办法是手动下载数据集,放到 Keras 的本地缓存目录。比如 MNIST,Keras 会去~/.keras/datasets/找mnist.npz文件,你只要把这个文件手动下载好放进去,load_data()就会直接读取本地缓存,不再走网络。

具体操作是:先从可访问的数据源拿到mnist.npz,放到~/.keras/datasets/目录下,然后正常执行代码。Keras 检测到文件存在,就不会重复下载。类似方式也适用于imdb.npz、cifar-10-batches-py.tar.gz这些文件。

这一条几乎是这本书所有读者都会遇到的问题,我的经验是:如果某个数据集下载出问题,不要反复重试,直接搜“Keras datasets 手动下载 缓存”,找到对应文件丢进去,最多五分钟就能解决。

4.3 Apple Silicon Mac 上的 “无法利用 GPU” 问题

很多用 M 系列芯片 Mac 的朋友会发现,训练速度虽然还行,但日志里一直显示 CPU 在跑,GPU 没有参与。这是因为tensorflow-macos默认不会自动调用 GPU,需要额外安装tensorflow-metal。

装完之后,设置环境变量TF_METAL_DEVICE或者直接运行代码确认:

import tensorflow as tf print(tf.config.list_physical_devices())

输出里能看到METAL开头的设备,就说明 GPU 被识别了。我实测下来,M1 Pro 跑 MNIST 全连接网络,开启 Metal 后速度提升大约 3 倍,但跑 ViT 或大一点的 CNN 时,优势更明显。

不过tensorflow-metal偶尔会和某些算子不兼容,报GPU does not support op之类的错误。遇到这种坑,不用死磕,直接在代码开头强制走 CPU:

import os os.environ["CUDA_VISIBLE_DEVICES"] = "-1" # 对 TensorFlow 无效,需要下面这行 os.environ["PHYSICAL_DEVICES"] = "CPU"

更稳妥的方式是:

import tensorflow as tf tf.config.set_visible_devices([], 'GPU')

这样虽然慢一点,但能保证代码跑通。先把结果跑出来,再回来调性能。

4.4 给新手的几条实在建议

这几条是我自己反复读了多遍这本书之后整理的,不一定写在书里,但确确实实是新手阶段最容易忽略的东西:

第一,每章后面的练习一定要做。这本书章节末尾的练习不多,但每一道都值得写。它不会给你标准答案,你得自己折腾,这个过程能逼你把前面学到的 API 真正用起来。

第二,前几章可以快速过,第八章(卷积神经网络)和第十二章(生成式深度学习)要反复读。前者是计算机视觉的核心,后者是 GAN、VAE 这些生成模型的人口,都是最实用、最能激发兴趣的部分。

第三,运行代码的时间不要花在抄代码上,要花在“改代码”上。把epochs从 5 改到 20,把激活函数从relu换成tanh,把优化器从rmsprop换成adam,然后看训练曲线怎么变。整本书读下来,你的收获不是记住了多少 API,而是理解了“哪些旋钮影响什么”,这才是真正能迁移到新项目上的能力。

第四,这本书可以配合 Keras 官方文档一起读。书中对于一些 API 的解释比较简短,官方文档里的示例更丰富。遇到“这行代码为什么这么写”的疑问,先查文档,再回来继续读,效果最好。

我自己在重译这本书之前,其实已经能熟练用 PyTorch 了,但翻完前半本之后,我对 Keras 的设计哲学有了更深的理解。Keras 把很多默认选择直接替你做好了,比如对全连接层默认初始化、默认正则化策略,这些设定背后都有对应的历史考量和实验依据。你未必认同 Keras 的每一个选择,但能看懂它为什么这样选,本身就是在学深度学习。

这个系列后面,我打算按章节逐篇更新,每一篇都会包含 GPT 重译后的关键章节精读、完整可运行的代码,以及我在跑实验时发现的问题。如果你正在读这本书,或者打算开读,可以在评论区告诉我你卡在哪一章,我会优先安排更新对应的内容。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/25 3:58:34

专科毕业论文如何高效完成?专业学术智能体与AI写作工具实操对比

我经常被同学、学弟学妹问到同一个问题:毕业论文到底怎么搞?尤其对专科生来说,毕业设计往往不是学术研究,而是“完整走通一个项目流程”——要选题、写开题报告、做文献综述、写正文、降重、做答辩PPT,每一步都有格式要…

作者头像 李华
网站建设 2026/9/25 3:57:41

零代码API服务:从SQL到HTTP接口的原理、落地与避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/25 3:55:38

TCNOpen 源码编译与 TRDP 协议通信测试实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/25 3:54:18

倒装贴片与一般贴片工艺选型:从原理到实践

在消费电子、汽车电子、通信模块这些领域摸爬滚打这些年,几乎每个封装工程师都会遇到同一个灵魂拷问:手头这颗芯片,到底该走倒装贴片工艺(Flip Chip),还是老老实实用一般贴片工艺(Die Attach W…

作者头像 李华
网站建设 2026/9/25 3:53:50

从AI Coding到AI Engineering:16万行代码重构背后的工程化实践

三个月前,我带着一个三人小团队,接下了一家制造企业核心交易系统重构的活。为了赶工期,我们全面切换到AI Coding工作流,大量使用AI辅助生成代码。三个月后项目交付,代码总量一统计——16万行。这里面大约八成以上是AI直…

作者头像 李华