Python 中用于深度学习研究和开发基础的两个顶级数值平台是 Theano 和 TensorFlow。
两者都是非常强大的库,但直接用于创建深度学习模型可能都比较困难。
在这篇文章中,您将了解 Keras Python 库,它提供了一种简洁方便的方式,可以在 Theano 或 TensorFlow 之上创建各种深度学习模型。
使用我的新书《使用 Python 进行深度学习》启动您的项目,其中包括分步教程和所有示例的 Python 源代码文件。
让我们开始吧。
- 2016 年 10 月更新:针对 Keras 1.1.0、Theano 0.8.2 和 TensorFlow 0.10.0 进行了更新。
- 2019 年 9 月更新:针对 Keras 2.2.5 API 进行了更新。

Keras Python 深度学习库简介
图片来源:Dennis Jarvis,保留部分权利。
什么是 Keras?
Keras 是一个极简的 Python 深度学习库,可以在 Theano 或 TensorFlow 之上运行。
它的开发旨在使深度学习模型的实现尽可能快速和简单,以用于研究和开发。
它在 Python 2.7 或 3.5 上运行,并且可以在底层框架的支持下无缝地在 GPU 和 CPU 上执行。它根据宽松的 MIT 许可发布。
Keras 由 Google 工程师 François Chollet 开发和维护,遵循四个指导原则:
- 模块化:模型可以单独理解为序列或图。深度学习模型的所有关注点都是离散组件,可以任意组合。
- 极简主义:该库只提供足以实现结果的功能,没有多余的修饰,并最大限度地提高了可读性。
- 可扩展性:新组件有意地易于在框架内添加和使用,旨在供研究人员试验和探索新想法。
- Python:没有单独的模型文件,没有自定义文件格式。一切都是原生的 Python。
如何安装 Keras
如果您已经拥有可用的 Python 和 SciPy 环境,Keras 的安装相对简单。
您还必须已经在系统上安装了 Theano 或 TensorFlow。
您可以在这里查看这两个平台的安装说明:
Keras 可以使用 PyPI 轻松安装,如下所示:
1 |
sudo pip install keras |
撰写本文时,Keras 的最新版本是 2.2.5。您可以使用以下代码片段在命令行上检查 Keras 的版本:
您可以使用以下代码片段在命令行上检查 Keras 的版本:
1 |
python -c "import keras; print keras.__version__" |
运行上述脚本您将看到
1 |
2.2.5 |
您可以使用相同的方法升级您的 Keras 安装:
1 |
sudo pip install --upgrade keras |
Keras 的 Theano 和 TensorFlow 后端
假设您已经安装了 Theano 和 TensorFlow,您可以配置 Keras 使用的后端。
最简单的方法是添加或编辑您主目录中的 Keras 配置文件:
1 |
~/.keras/keras.json |
其格式为:
1 2 3 4 5 6 |
{ "image_data_format": "channels_last", "backend": "tensorflow", "epsilon": 1e-07, "floatx": "float32" } |
在此配置文件中,您可以将“backend”属性从“tensorflow”(默认)更改为“theano”。Keras 将在下次运行时使用该配置。
您可以使用以下代码片段在命令行上确认 Keras 使用的后端:
1 |
python -c "from keras import backend; print(backend.backend())" |
使用默认配置运行此命令,您将看到:
1 2 |
使用 TensorFlow 后端。 tensorflow |
您还可以通过指定 KERAS_BACKEND 环境变量在命令行上指定 Keras 使用的后端,如下所示:
1 |
KERAS_BACKEND=theano python -c "from keras import backend; print(backend.backend())" |
运行此示例将打印
1 2 |
使用 Theano 后端。 theano |
Python 深度学习需要帮助吗?
参加我的免费为期两周的电子邮件课程,发现 MLP、CNN 和 LSTM(附代码)。
立即点击注册,还将免费获得本课程的 PDF 电子书版本。
使用 Keras 构建深度学习模型
Keras 的重点是模型的概念。
主要模型类型称为序列,它是层的线性堆栈。
您创建一个序列并按照希望执行计算的顺序向其中添加层。
定义后,您编译模型,该模型利用底层框架优化模型要执行的计算。在此您可以指定要使用的损失函数和优化器。
编译后,模型必须与数据拟合。这可以一次一个数据批次完成,或者通过启动整个模型训练方案来完成。这是所有计算发生的地方。
训练后,您可以使用模型对新数据进行预测。
我们可以将 Keras 中深度学习模型的构建总结如下:
- 定义您的模型。创建一个序列并添加层。
- 编译您的模型。指定损失函数和优化器。
- 拟合您的模型。使用数据执行模型。
- 进行预测。使用模型对新数据生成预测。
您只需几行代码即可使用 Keras 开发您的第一个深度学习神经网络。请参阅此分步 Keras 教程:
Keras 资源
以下列表提供了一些可以用来了解更多 Keras 的额外资源。
总结
在这篇文章中,您了解了用于深度学习研究和开发的 Keras Python 库。
您发现 Keras 的设计理念是极简主义和模块化,这使您能够非常快速地定义深度学习模型并在 Theano 或 TensorFlow 后端之上运行它们。
您对 Keras 或这篇文章有任何疑问吗?请在评论中提出您的问题,我将尽力回答。
总是在机器学习前沿!
谢谢
谢谢,Victor。
很棒的文章,Jason!我将开始我的深度学习之路,所以我想知道您是否可以帮助我了解硬件要求。运行 keras/theano/tensorflow 所需的最低计算资源(用于保存/加载 CNN 模型的磁盘空间、RAM、GPU 时间)是多少?
您可以在 CPU 上运行小型网络。
像大型 CNN 这样的大型网络确实需要大型硬件,比如 GPU。我建议在 AWS 上使用 GPU,这可能非常划算,例如每小时不到 1 美元。
嗨 Jason,我如何检查我的神经网络是否使用 GPU 训练,而不是仅仅使用 CPU?
很好的问题。
通常,当您使用 Theano 作为后端并将其配置为使用 GPU(通过运行时标志或配置文件)时,它会在命令行上报告正在使用 GPU。
尊敬的 Jason 博士和 Marcel,
我想补充一点,如果您使用 Tensorflow 作为后端,有两个安装版本:GPU 或 CPU。
我的参考是这个 Stackexchange 网站 https://stackoverflow.com/questions/45068243/how-to-check-if-keras-tensorflow-backend-is-gpu-or-cpu-version。
从网站
如果你想知道 Keras 后端是否使用 GPU 或 CPU
所以我的特定版本的 Keras 为特定后端使用 CPU。
我的特定版本的 Keras 使用 Tensorflow 后端。所以我的 Tensorflow 安装使用 CPU。
设置 Tensorflow 用于 GPU 或 CPU 处理并不那么简单。
我对此表示异议,但似乎无法通过编程方式在 Tensorflow 的 GPU 和 CPU 版本之间切换。
我不会讨论使用哪种特定品牌的 GPU,因为 Tensorflow 的 GPU 版本的“pipping”似乎与品牌无关,例如 Nvidia 的 CUDA 是一种品牌。
尽管如此,如果您想安装 Tensorflow 的 GPU 或 CPU 版本,请这样做:
Tensorblow 的 GPU 版本
Tensorflow 的 CPU 版本
谢谢你,
悉尼的Anthony
尊敬的 Jason 博士和 Marcel,
我选择 Tensorflow 而非 Theano 的原因是 Theano 在 2019 年 1 月的最新版本是一个维护版本,修复了错误但没有新功能,参考 https://pypi.ac.cn/project/Theano/。
此外,如果您查看 GitHub 存储库 https://github.com/Theano/Theano,特别是 HISTORY.txt 文件,所有 Theano 版本都是维护版本,没有额外功能。此外,大多数文件夹很长时间没有更新,除了 Theano 文件夹(截至 2019 年 10 月 12 日,1 个月前)和“更新文档”(截至 2019 年 10 月 12 日,9 个月前)。
谢谢你,
悉尼的Anthony
这是一个很好的理由。
对于在安装 TensorFlow 时遇到问题的 Windows 用户,我仍然推荐 Theano。它适用于您使用 Keras 需要完成的几乎所有任务。
感谢分享。
嗨,Jason!
想问一下——您是否尝试过 Keras 进行 3D 卷积?我遇到了一些问题,无法从 Keras 团队获得帮助(https://github.com/fchollet/keras/issues/3561)。如果您知道那里什么是正确的,那就太好了!
抱歉,Linara,我还没有将 Keras 用于 3D CNN。
好的,无论如何谢谢您的回答!
嗨,Jason,
看来 Tensorflow 没有 Windows 安装程序。有替代方案吗?如果没有,您是否知道 Windows 版本正在开发中?
非常感谢,
Alan
嗨 Alan,
我的 Windows 学生使用 Theano。实际上,通常我在我的书籍和教程中推荐 Theano 而不是 Tensorflow。至少目前,它在通用硬件上更快。
我使用 Vagrant 设置了一个安装了 Keras、TensorFlow 和 Theano 的虚拟机。我在 Windows 上运行它。
如果有人感兴趣,可以查看 https://github.com/nirmalyaghosh/deep-learning-vm。
好方法,感谢 Nirmalya 分享。
@Alan Macshane
您可以通过获取 Windows 10 Insider Preview 版本在 Windows 上获得 Tensorflow。
我正在 Windows 上使用 Tensorflow
嗨 Jason
您是否有关于使用深度学习或经典计算机视觉方法从图像中进行性别分类的教程?
这将非常有帮助
我没有,Ranjeet,但那是一个非常酷的项目想法!
嗨,Jason,
我想知道是否有一种方法可以准备一个数据集,该数据集将是 DNA 的字符串序列“ATGCCGATGA”及其标签?我到处搜索都找不到答案。
提前非常感谢,
嗨 Steven,考虑将字母编码为数字并将其视为序列分类问题。与情感分析没有太大区别。
我希望这能激发一些想法。
有一本新书名为《Elegant Scipy》,其中有使用 numpy 规范化基因表达数据的示例,该数据使用将字母编码为数字的方法,可能很有用。
嗨,Jason,
您太棒了。
谢谢 Ali。
您能指导我如何在 32 位 Linux 上安装 TensorFlow 吗?
抱歉 Ash,我没有针对 32 位 Linux 上 TensorFlow 的特定指南。
您有什么建议可以在 32 位 Linux 上使用 keras 吗?
您可能能够在 32 位 Linux 上运行,我不知道,抱歉。
一种可行的方法是使用亚马逊网络服务来运行您的模型
https://machinelearning.org.cn/develop-evaluate-large-deep-learning-models-keras-amazon-web-services/
希望这能有所帮助。
很简单!将后端更改为“theano”将允许您在 32 位 Linux 上运行 keras。无论如何谢谢!我也会研究 AWS。
很高兴听到这个消息,Ash。
嗨,Jason,
很棒的文章
您是否有关于使用循环神经网络进行语音分类的教程?
这将非常有帮助
目前还没有,leila。
下午好。我有一个小问题:我安装了 Keras,但是“Sequential - 没有名为此的模块”。我该如何连接这个模块?
Nastya,确切的错误是什么?
您能确认 Keras 库是否成功安装了吗?
您知道 Microsoft 是否在他们的 Azure 机器学习产品中(https://azure.microsoft.com/en-us/services/machine-learning/)使用 Keras 结合 Theano 或 TensorFlow 吗?也许这里有一些线索:https://blogs.technet.microsoft.com/machinelearning/2016/11/28/deep-learning-made-easy-in-azure/,但我不太确定。
抱歉,我不知道。
Keras 是否与 python 3.6 兼容?
不,根据文档不兼容
https://keras.org.cn/
还是可以试一下。
我正在尝试使用以下命令在终端中将 theano 指定为默认后端:
KERAS_BACKEND=theano python -c “from keras import backend; print(backend._BACKEND)”
它给出了以下错误:
“KERAS_BACKEND”不被识别为内部或外部命令,
可操作程序或批处理文件。
请告知解决方案。
谢谢和问候,
Gopal
很抱歉听到这个消息,也许它只适用于您的平台——您使用的是 Windows 吗?
尝试更改 Keras 配置文件,在 ~/.keras/keras.json 中。
嗨,Jason!
每次我运行 Keras,我都会得到不一致的结果。
有没有办法让它收敛到与 sklearn 中的“random_state”相同的解决方案,后者帮助我们无论运行多少次都能得到相同的解决方案。
请帮助我解决这个问题。
谢谢。
是的,神经网络是随机的。
我建议重复您的实验多次并报告平均模型性能。
嗨,Jason,
感谢这篇非常有用的文章。我被说服了!我现在正从 pyBrain 转向 Keras。
我发现您的博客格式和结构非常好。我正在启动自己的博客,以尝试为我的学生提供额外的资源。
我还没有决定工具,但我想直接从 Jupyter Notebook 发布文章。您是这种情况吗?如果是,您能分享您的工作流程和使用的工具吗?
我发现您用于显示代码块的小程序特别有趣,它允许打开和关闭行号。
谢谢!
很高兴听到这个消息。
抱歉,我不使用 Jupyter Notebook,我发现它们会让初学者感到困惑并隐藏/导致错误。
我在文本编辑器中编写代码和文字,然后发布到我的博客。
有没有办法下载 32 位 Windows 计算机的 tensor flow?
也许这个教程会有帮助
https://machinelearning.org.cn/setup-python-environment-machine-learning-deep-learning-anaconda/
神经网络学习和深度神经网络(深度学习)学习之间的实际区别是什么?只是每层权重初始化不同吗?还是反向传播算法不同?
先谢谢了
不再有区别了
https://machinelearning.org.cn/what-is-deep-learning/
先生,Theano 还是 Tensorflow 哪个是最好的库?对于深度学习初学者,推荐哪个库?
Keras 是最好的起点
https://machinelearning.org.cn/start-here/#deeplearning
你好,杰森,
我正在进行一个小型项目,需要使用 3D 摄像机(来自 Microsoft)检测情绪。我将使用 CNN 进行此操作,但在这种情况下可以使用 keras 吗?
这将是实时的。
当然可以。
我可以在 32 位 Linux 上安装 keras 吗?
也许可以试试这个教程
https://machinelearning.org.cn/setup-python-environment-machine-learning-deep-learning-anaconda/
你好 Jason,
如何在 tensorflow 代码中加载一组 jpg 图像作为我的数据集?
你能帮我找到一个有文档的代码吗?
抱歉,我没有关于 tensorflow 或加载 jpeg 的资料。
我该如何将模型拟合到收敛(即直到损失不再改变)而不是基于 epoch 参数进行拟合?
设置大量的 epoch 并使用提前停止来在保留数据集上没有进一步改进时停止训练。
嗨 Jason,感谢您精彩的文章。是否可以在没有 GPU 和外部硬件的情况下使用 CNN 网络?
是的。这个博客上的所有 CNN 示例都可以在 CPU 或 GPU 上运行。
一些大型示例可能需要很长时间才能运行。
先生,keras 准备交易已完成,但验证交易总是失败。我该怎么办?
您所说的“验证翻译”是什么意思?
你好,Jason
一个可能很笨,但很简单的问题
假设我运行 CNN 1000 个 epoch,我发现在第 534 个 epoch 获得了最大精度
那么我应该重新运行模型使用 534 个 epoch,以便我可以将其用于预测吗?
另外,一个相关的问题..
模型的精度是其最后一个 epoch 运行的精度吗?
您可以,或者您可以使用检查点回调在训练期间自动保存最佳模型
https://machinelearning.org.cn/check-point-deep-learning-models-keras/
尊敬的Jason博士,
我刚刚在 2019 年 10 月 12 日 12:18 更新了我的 Keras 版本,
导入 keras
所以最新版本是 2.3.1
谢谢你
悉尼的Anthony
干得好!