拓冰建站拓冰建站
首页 / 资讯中心 / 正文

深度学习入门首选?《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.4tf.keras成了主流入口很多第一版里的小技巧已经被集成到 Keras 本身的 API 里了。这带来一个很实际的好处你按第二版敲代码基本不会遇到“因为框架版本太老而跑不起来”的问题。书里用的layers.Dense、layers.Conv2D、layers.LSTM这些接口到今天依然是 Keras 的稳定 API。第二个大变化是内容更新。第二版加入了 Transformer、Vision TransformerViT、神经风格迁移、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。所以只要装好了 TensorFlowKeras 就跟着有了。版本选择上我建议直接装 TensorFlow 2.13 或更新的稳定版。书里用的是 TensorFlow 2.4 时代的写法但核心 API 在 2.13 里基本都兼容只有个别函数有 deprecation warning不影响训练结果。Python 版本建议 3.9 到 3.11TensorFlow 在新版本上跑得最稳。不要用 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 python3.10 conda activate dlwp pip install tensorflow jupyter matplotlib numpy pandas scikit-learn注意不要用conda install tensorflowconda 源里的 TensorFlow 版本经常滞后直接用 pip 装最新稳定版更省心。macOS 分两种情况。Intel 芯片的 Mac 装法和上面一样。Apple Silicon 的 MacM1、M2、M3需要装专门的 TensorFlow 版本Apple 官方提供tensorflow-macos但更简单的方式是用tensorflow-metal插件启用 GPU 加速pip install tensorflow tensorflow-metaltensorflow-metal装好之后Keras 训练会自动调用 MPSMetal Performance Shaders后端效果很明显。但没有这个插件也不影响跑CPU 模式照样能跑完大多数章节。Linux 服务器上我一般不用 Anaconda直接用 venv 加 pippython3 -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-learn3.3 用 Jupyter Notebook 跑第一个数字识别模型书里第二章有一个手写数字识别的完整例子这是整套书第一个能跑的代码用的数据集是 MNIST。我想强调一下MNIST 是深度学习的“Hello World”你跑通它就意味着环境基本没问题了。启动 Jupyterjupyter 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, activationrelu), layers.Dense(10, activationsoftmax) ]) # 编译模型 model.compile(optimizerrmsprop, losssparse_categorical_crossentropy, metrics[accuracy]) # 训练模型 model.fit(train_images, train_labels, epochs5, batch_size128) # 评估模型 test_loss, test_acc model.evaluate(test_images, test_labels) print(ftest_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)看看准确率怎么变把epochs5改成epochs20看看会不会过拟合。这种“破坏式实验”比单纯按书敲代码印象深得多。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 环境里先装 ipykernelconda install ipykernel python -m ipykernel install --user --namedlwp --display-name DLWP之后在 Jupyter 右上角切换内核到 DLWP就没有这个问题了。第二种报错通常是版本太旧或太新导致的 API 变化。比如书里用的keras.datasets.imdb.load_data(num_words10000)在旧版 TensorFlow 里是keras.datasets.imdb.load_data(nb_words10000)参数名变了。遇到这种问题最快的方式是在搜索框里查官方文档别自己猜。4.2 数据集下载失败别让卡在第一步这本书用的数据集主要是 MNIST、IMDB 电影评论、CIFAR-10 和 Boston Housing。它们都是 Keras 自带的下载接口但下载源在国外网络不稳定时经常会卡在Downloading data from ...这一步然后报连接超时。我的解决办法是手动下载数据集放到 Keras 的本地缓存目录。比如 MNISTKeras 会去~/.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之类的错误。遇到这种坑不用死磕直接在代码开头强制走 CPUimport 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 重译后的关键章节精读、完整可运行的代码以及我在跑实验时发现的问题。如果你正在读这本书或者打算开读可以在评论区告诉我你卡在哪一章我会优先安排更新对应的内容。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门