4.1 深度学习框架-TensorFlow
学习目标
-
目标
-
了解Tensorflow框架的组成、接口
-
了解TensorFlow框架的安装
-
知道tf.keras的特点和使用
-
-
应用
-
无
-
4.1.1 常见深度学习框架对比
为什么需要深度学习框架
但是如果您需要实现更复杂的模型,如卷积神经网络(CNN)或循环神经网络(RNN)时,会发现从头开始实现复杂模型是不切实际的,因此深度学习框架应运而生,它可以帮助您轻松实现您自己的神经网络:
-
不需要手写CUDA 代码能跑GPU;
-
容易构建大的计算图(computational graphs)
1、搜索兴趣度
2、github的各种指标对比:
3、PyTorch在研究领域日益占据主导地位
首先当然是先用数据说话。下图显示了顶级研究会议接受论文中,使用TensorFlow或Pythorch的比率。可以发现,所有的折线都向上倾,并且在2019年,主要会议的论文中,多数使用的都是PyTorch。
4、TensorFlow版本变化缺点
-
频繁变动的接口。TensorFlow的接口一直处于快速迭代之中,并且没有很好地考虑向后兼容性,这导致现在许多开源代码已经无法在新版的TensorFlow上运行,同时也间接导致了许多基于TensorFlow的第三方框架出现BUG。接口设计过于晦涩难懂,对初学者来说较难上手。(不过,最新2.0版本对接口设计有了重大改进,使用起来比较方便)
tensorflow的github地址:https://github.com/tensorflow/tensorflow
框架选择:TensorFlow 是市场需求最多,也是增长最快的框架,它的领先地位不会在短期内被颠覆。 PyTorch 也在迅速发展,它在工作列表中的大量增加证明了其使用和需求的增加。在过去的六个月里,Keras 也有了很大的发展。最后,值得注意的是,FastAI 是从较小的基数开始发展的,它是最年轻的深度学习框架。TensorFlow 和 PyTorch 都是很好的值得学习的框架。
注:前几年一直关注AI框架,但是近年来框架的同质化说明了它不再是一个需要花大精力解决的问题,TensorFlow、Pytorch这样的框架在工业界的广泛应用,以及各种框架利用 Python 在建模领域的优秀表现,已经可以帮助我们解决很多以前需要自己编程实现的问题,如果作为 AI 工程师,我们应该跳出框架的桎梏,往更广泛的领域寻找价值。
4.1.2 TensorFlow介绍
官网:https://www.tensorflow.org/, 介绍:An open source machine learning platform
TensorFlow 可以为以上的这些需求提供完整的解决方案。具体而言,TensorFlow 包含以下特性:
-
模型的建立与调试: 使用动态图模式 Eager Execution 和著名的神经网络高层 API 框架 Keras,结合可视化工具 TensorBoard,简易、快速地建立和调试模型;
-
模型的训练: 支持 CPU / 单 GPU / 单机多卡 GPU / 多机集群 / TPU 训练模型,充分利用海量数据和计算资源进行高效训练;
-
模型的部署: 通过 TensorFlow Serving、TensorFlow Lite、TensorFlow.js 等组件,使 TensorFlow 模型能够无缝地部署到服务器、移动端、嵌入式端和网页端等多种使用场景;
-
预训练模型调用: 通过 TensorFlow Hub 和 Tensor2Tensor,可以方便地调用预训练完毕的已有成熟模型。
作为开发者和工程师你可能希望在你的产品中加入一些与人工智能相关的功能,抑或需要将已有的深度学习模型部署到各种场景中。具体而言,包括:
-
如何导出训练好的模型?
-
如何在本机使用已有的预训练模型?
-
如何在服务器、移动端、嵌入式设备甚至网页上高效运行模型?
4.1.2.1 TF2.0 模型使用最新架构图
-
饱受诟病TF1.0的API混乱
-
删除 queue runner 以支持 tf.data。删除图形集合。
-
API 符号的移动和重命名。
-
tf.contrib 将从核心 TensorFlow 存储库和构建过程中移除
-
TensorFlow 2.0 将专注于 简单性 和 易用性,具有以下更新:
-
使用 Keras 和 eager execution,轻松构建模型
-
在任意平台上实现生产环境的稳健模型部署
-
为研究提供强大的实验工具
-
通过清理废弃的 API 和减少重复来简化 API
1、使用tf.data加载数据。使用输入管道读取训练数据,输入管道使用tf.data创建。利用tf.feature_column描述特征,如分段和特征交叉。
2、使用tf.keras构建、训练并验证模型,或者使用Premade Estimators。
-
Keras与TensorFlow的其余部分紧密集成,因此用户可以随时访问TensorFlow的函数。如线性或逻辑回归、梯度上升树、随机森林等也可以直接使用(使用tf.estimatorAPI实现)。
-
如果不想从头开始训练模型,用户也可以很快利用迁移学习来训练使用TensorFlow Hub模块.
3、使用分布式策略进行分布式训练。对于大型机器学习训练任务,分布式策略API可以轻松地在不同硬件配置上分配和训练模型,无需更改模型的定义。由于TensorFlow支持各种硬件加速器,如CPU,GPU和TPU,因此用户可以将训练负载分配到单节点/多加速器以及多节点/多加速器配置上(包括TPU Pod)。
4、导出到Saved Model。 TensorFlow将对Saved Model进行标准化,作为TensorFlow服务的一部分,他将成为TensorFlow Lite、TensorFlow.js、TensorFlow Hub等格式的可互换格式。
工作流程
API级别:其中Keras是一个用Python编写的开源神经网络库,能够在TensorFlow、Microsoft Cognitive Toolkit、Theano或PlaidML之上运行。Keras旨在快速实现深度神经网络,专注于用户友好、模块化和可扩展性,是ONEIROS(开放式神经电子智能机器人操作系统)项目研究工作的部分产.2017年,Google的TensorFlow团队决定在TensorFlow核心库中支持Keras。 Chollet解释道,Keras被认为是一个接口,而非独立的机器学习框架。它提供了更高级别、更直观的抽象集
-
高层API (High level): 包括Estimators、Keras以及预构建好的Premade estimator(如线性回归、逻辑回归这些、推荐排序模型wide&deep);
-
中层API (Mid level): 包括layers, datasets, loss和metrics等具有功能性的函数,例如网络层的定义,Loss Function,对结果的测量函数等;
-
底层API (Low level): 包括具体的加减乘除、具有解析式的数学函数、卷积、对Tensor属性的测量等。
4.1.2.2 TensorFlow 资源
模型和数据集
TensorFlow提供了很多常见开源数据集,并且相应模型库也包含在TensorFlow中,用于迁移学习中重复利用模型
工具
探索可支持和加速 TensorFlow 工作流程的工具。可以支持我们分析模型、构建流水线工程等等。
-
Tensorboard:可视化学习
-
What-if:模型理解、调试分析
-
TFX:部署生产型机器学习流水线
-
TensorFlow Lite:移动和IOT设备部署
4
库和扩展程序
探索使用TensorFlow构建高级模型或方法的库,并访问可扩展TensorFlow的特定领域的应用程序。举几个例子
-
Tensorflow Agents:用于强化学习库
-
TensorFlow Ranking:用于排序学习技术的库
4.1.3 TensorFlow的安装(2.0版本)
安装 TensorFlow在64 位系统上测试这些系统支持 TensorFlow:
-
Ubuntu 16.04 或更高版本
-
Windows 7 或更高版本
-
macOS 10.12.6 (Sierra) 或更高版本(不支持 GPU)
进入虚拟环境当中再安装。刚开始的环境比较简单,只要下载tensorflow即可
-
环境包:
安装较慢,指定镜像源,请在带有numpy等库的虚拟环境中安装
-
1、非GPU版本安装
ubuntu安装
pip install tensorflow==2.0.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
-
2、GPU版本安装
pip install tensorflow-gpu==2.0.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
注:如果需要下载GPU版本的(TensorFlow只提供windows和linux版本的,没有Macos版本的)参考的官网网址:https://www.tensorflow.org/install/gpu?hl=zh-cn, 这里我们给大家提供了centos的安装教程,会易懂些,参考本地文件:TensorFlow2.0GPU安装教程.pdf
拓展:
1、TensorFlow 所需的硬件配置
在很多人的刻板印象中,TensorFlow 乃至深度学习是一件非常 “吃硬件” 的事情,以至于一接触 TensorFlow,第一件事情可能就是想如何升级自己的电脑硬件。不过,TensorFlow 所需的硬件配置很大程度是视任务和使用环境而定的:
对于 TensorFlow 初学者,大部分教学示例,大部分当前主流的个人电脑(即使没有 GPU)均可胜任,无需添置其他硬件设备。如果涉及计算量较大的示例(例如 在 cats_vs_dogs 数据集上训练 CNN 图像分类),一块主流的 NVIDIA GPU 会大幅加速训练。如果自己的个人电脑难以胜任,可以考虑在云端训练
对于参加数据科学竞赛(比如 Kaggle)或者经常在本机进行训练的个人爱好者或开发者,一块高性能的 NVIDIA GPU 往往是必要的。核心数和显存大小是决定显卡机器学习性能的两个关键参数,前者决定训练速度,后者决定可以训练多大的模型以及训练时的最大 Batch Size,对于较大规模的训练而言尤其敏感。
对于前沿的机器学习研究(尤其是计算机视觉和自然语言处理领域),多 GPU 并行训练是标准配置。为了快速迭代实验结果以及训练更大规模的模型以提升性能,4 卡、8 卡或更高达到10块的 GPU 数量是常态。
2、常见显卡速度对比,以及目前较好的显卡对比,详情请参考官网:https://developer.nvidia.com/cuda-gpus
CUDA compute capability,这是英伟达公司对显卡计算能力的一个衡量指标;
FLOPS 每秒浮点运算次数,TFLOPS表示每秒万亿(10^12)次浮点计算;
显存大小也决定了实验中能够使用的样本数量和模型复杂度, 越高越好。
两种主要系列:
GTX 系列显卡优缺点:优点:单精度计算能力强大,显存最大12Gb,性价比高;缺点:双精度计算能力弱,没有计算纠错ECC 内存,对于超高精度计算不利
Tesla 优缺点优点:双精度计算能力最强,拥有ECC内存增强计算准确率,缺点:单精度计算能力差,价格较高
GeForce and TITAN 系列:
GPU
Compute Capability
7.5
7.5
7.5
7.5
7.5
7.0
6.1
6.1
6.1
Tesla系列:
GPU
Compute Capability
7.5
7.0
6.0
6.1
6.1
5.2
5.2
3.7
3.5
4.1.4 tf.keras介绍
Keras是一个用Python编写的开源神经网络库。它能够运行在TensorFlow,Microsoft Cognitive Toolkit,Theano或PlaidML之上。TensorFlow 1.9 新增 tf.keras,Keras与TF的深度集成。
为什么选择 Keras?
在如今无数深度学习框架中,为什么要使用 Keras 而非其他?以下是 Keras 与现有替代品的一些比较。
-
Keras 遵循减少认知困难的最佳实践: 它提供一致且简单的 API,它将常见用例所需的用户操作数量降至最低,并且在用户错误时提供清晰和可操作的反馈。
-
因为 Keras 与底层深度学习语言(特别是 TensorFlow)集成在一起,所以它可以让你实现任何你可以用基础语言编写的东西。特别是,tf.keras 作为 Keras API 可以与 TensorFlow 工作流无缝集成。
-
Keras 被工业界和学术界广泛采用
截至 2018 年中期,Keras 拥有超过 250,000 名个人用户。与其他任何深度学习框架相比,Keras 在行业和研究领域的应用率更高(除 TensorFlow 之外,且 Keras API 是 TensorFlow 的官方前端,通过 tf.keras模块使用)。
-
Keras 拥有强大的多 GPU 和分布式训练支持
-
Keras内置对多 GPU 数据并行的支持。
-
-
Keras 的发展得到深度学习生态系统中的关键公司的支持
Keras API 以 tf.keras 的形式包装在 TensorFlow 中。
4.1.4.1 tf.keras与keras API
keras与tf.keras相关API设置一样,主要有以下常用模块
-
applications 模块:Keras应用程序是具有预训练权重的固定架构。
-
callbacks module:回调:在模型训练期间在某些点调用的实用程序。
-
datasets module:Keras内置数据集。
-
initializers 模块:Keras初始化器序列化/反序列化。
-
layers 模块:Keras层API。
-
losses 模块:内置损失功能。
-
metrics 模块:内置指标。
-
models module:模型克隆代码,以及与模型相关的API。
-
optimizers module:内置优化器类。
-
preprocessing 模块:Keras数据预处理工具。
-
regularizers 模块:内置正规化器。
-
utils 模块:Keras实用程序。
4.1.4.2 tf.keras 数据集
1、CIFAR10 小图片分类数据
50000张32x32大小的训练数据和10000张测试数据,总共100个类别。
from keras.datasets import cifar100
(x_train, y_train), (x_test, y_test) = cifar100.load_data()
-
返回值:
-
两个元组:
-
x_train, x_test: uint8 数组表示的 RGB 图像数据,尺寸为 (num_samples, 3, 32, 32) 或 (num_samples, 32, 32, 3),基于 image_data_format 后端设定的 channels_first 或 channels_last。
-
y_train, y_test: uint8 数组表示的类别标签,尺寸为 (num_samples,)。
-
-
1、默认下载置于用户目录的 `.keras/dataset` 目录下(Windows 下用户目录为 C:\Users\用户名 ,Linux 下用户目录为 `/home/用户名` )
2、mnist = tf.keras.datasets.mnist将从网络上自动下载 MNIST 数据集并加载。如果运行时出现网络连接错误,可以从 https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz 或 https://s3.amazonaws.com/img-datasets/mnist.npz 下载 MNIST 数据集 mnist.npz文件
2、时装分类Mnist数据集
60,000张28x28总共10个类别的灰色图片,10,000张用于测试。
类别编号 | 类别 |
0 | T-shirt/top |
1 | Trouser |
2 | Pullover |
3 | Dress |
4 | Coat |
5 | Sandal |
6 | Shirt |
7 | Sneaker |
8 | Bag |
9 | Ankle boot |
from keras.datasets import fashion_mnist
(x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()
-
返回两个元组:
-
x_train, x_test: uint8 数组表示的灰度图像,尺寸为 (num_samples, 28, 28)。
-
y_train, y_test: uint8 数组表示的数字标签(范围在 0-9 之间的整数),尺寸为 (num_samples,)。
-
4.1.5 总结
-
Tensorflow框架的组成、接口
-
TensorFlow框架的安装
-
tf.keras的特点和使用