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被认为是一个接口,而非独立的机器学习框架。它提供了更高级别、更直观的抽象集

  1. 高层API (High level): 包括Estimators、Keras以及预构建好的Premade estimator(如线性回归、逻辑回归这些、推荐排序模型wide&deep);

  2. 中层API (Mid level): 包括layers, datasets, loss和metrics等具有功能性的函数,例如网络层的定义,Loss Function,对结果的测量函数等;

  3. 底层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

NVIDIA TITAN RTX

7.5

Geforce RTX 2080 Ti

7.5

Geforce RTX 2080

7.5

Geforce RTX 2070

7.5

Geforce RTX 2060

7.5

NVIDIA TITAN V

7.0

NVIDIA TITAN Xp

6.1

NVIDIA TITAN X

6.1

GeForce GTX 1080 Ti

6.1

Tesla系列:

GPU

Compute Capability

Tesla T4

7.5

Tesla V100

7.0

Tesla P100

6.0

Tesla P40

6.1

Tesla P4

6.1

Tesla M60

5.2

Tesla M40

5.2

Tesla K80

3.7

Tesla K40

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的特点和使用

4.1 深度学习框架-TensorFlow相关推荐

  1. 2_初学者快速掌握主流深度学习框架Tensorflow、Keras、Pytorch学习代码(20181211)

    初学者快速掌握主流深度学习框架Tensorflow.Keras.Pytorch学习代码 一.TensorFlow 1.资源地址: 2.资源介绍: 3.配置环境: 4.资源目录: 二.Keras 1.资 ...

  2. DL框架之TensorFlow:深度学习框架TensorFlow Core(低级别TensorFlow API)的简介、安装、使用方法之详细攻略

    DL框架之TensorFlow:TensorFlow Core(低级别TensorFlow API)的简介.安装.使用方法之详细DL框架之TensorFlow:深度学习框架TensorFlow Cor ...

  3. DL框架:主流深度学习框架(TensorFlow/Pytorch/Caffe/Keras/CNTK/MXNet/Theano/PaddlePaddle)简介、多个方向比较、案例应用之详细攻略

    DL框架:主流深度学习框架(TensorFlow/Pytorch/Caffe/Keras/CNTK/MXNet/Theano/PaddlePaddle)简介.多个方向比较.案例应用之详细攻略 目录 深 ...

  4. TensorFlow:深度学习框架TensorFlow TensorFlow_GPU的简介、安装、测试之详细攻略

    TensorFlow:深度学习框架TensorFlow & TensorFlow_GPU的简介.安装.测试之详细攻略 目录 TensorFlow的简介 TensorFlow的安装 1.tens ...

  5. DL框架之Tensorflow:深度学习框架Tensorflow的简介、安装、使用方法之详细攻略

    DL框架之Tensorflow:深度学习框架Tensorflow的简介.安装.使用方法之详细攻略 目录 Tensorflow的简介 1.描述 2.TensorFlow的六大特征 3.了解Tensorf ...

  6. 深度学习入门笔记系列(一)——深度学习框架 tensorflow 的介绍与安装

    本系列将分为 8 篇 .今天是第一篇 ,工欲善其事必先利其器 ,先简单讲讲当前的主流深度学习框架 TensorFlow 及其安装方法 . 我们知道 ,深度学习研究的热潮持续高涨 ,许多的开源深度学习框 ...

  7. 深度学习框架tensorflow学习与应用——代码笔记11(未完成)

    11-1 第十周作业-验证码识别(未完成) #!/usr/bin/env python # coding: utf-8# In[1]:import os import tensorflow as tf ...

  8. 深度学习框架TensorFlow系列之(五)优化器1

    1 背景 梯度下降算法是目前最流行的优化算法之一,并且被用来优化神经网络的模型.业界知名的深度学习框架TensorFlow.Caffe等均包含了各种关于梯度下降优化器的实现.然而这些优化器经常被用作黑 ...

  9. 快速了解深度学习框架--tensorflow(更新中)

    深度学习框架(工具)简单来说即库,需要import,比如tensorflow,Caffe- 深度学习框架提供了一系列的深度学习的组件(对于通用的算法,里面会有实现),当需要使用新的算法的时候就需要用户 ...

最新文章

  1. Java线程怎样映射到操作系统线程
  2. java语言程序设计期末复习综合练习题_Java语言程序设计期末复习综合练习题答案...
  3. 八数码问题及A*算法
  4. oracle如何启动和停止服务,CentOS启动和停止服务详解
  5. 解决:此错误(HTTP 500 内部服务器错误)意味着您正在访问的网站出现了服务器问题,此问题阻止了该网页的显示...
  6. 尝试做了个Chrome浏览器的扩展程序,显示extensions的页面
  7. 劲脆鸡米花、鸡排、黄金鸡块
  8. App设计灵感之十二组精美的手机文件管理App设计案例
  9. 服务器租用单线、双线、bgp 相比有哪些区别优势?
  10. 技术转管理:应该如何识人、带人和用人?
  11. pandas.DataFrame.append
  12. kubenerte启动_老司机和你深聊Kubenertes 资源分配之 Request 和 Limit 解析
  13. 推荐几款好用的富文本编辑器
  14. 关于GBK编码及C语言中文输出问题
  15. 关于Mac学习C语言通过vscode如何编译运行代码
  16. SpringBoot使用爬虫(初级阶段)
  17. VB如何自动保存_VB编写的身份证号自动识别实用程序
  18. Android性能:内存篇之内存回收
  19. java初始化三门课程_[Java] 实验4参考代码
  20. Brendan Eich谈Javascript的起源

热门文章

  1. 从零开始学USB(七、端点、管道、接口、配置、设备)【转】
  2. 中医对伤风感冒的看法
  3. 页面添加H5声音图标
  4. 周鸿祎的绝招—“寄生战略”
  5. 洛谷P1020:导弹拦截
  6. 数字IC设计中为什么要避免锁存器(Latches)
  7. mysql sql variant_使用 sql_variant 数据
  8. 在如今的就业形势下,想要跳槽?你该把握的一个原则和两个技巧!
  9. 关于springboot使用getServletContext().getRealPath(““)获取的是tomcat的临时缓存文件问题
  10. 小米开源文件管理器MiCodeFileExplorer-源码研究(4)-文件操作工具类FileOperationHelper