TensorFlow 2.0 快速开发指南 – 第一章 – TensorFlow 2.0 介绍

TensorFlow在2011年以DisBelief项目名开始开发,DisBelief是谷歌的一个内部闭源项目。 DisBelief是一个采用深度学习神经网络的机器学习系统。 该系统已于2015年11月9日转换为TensorFlow,该版本已在Apache 2.0开源许可下发布给开发人员社区。版本1.0.0于2017年2月11日发布。此后发布了多个版本。

TensorFlow的名字取自张量。 张量是矢量和矩阵更高维度的推广。张量的等级是唯一地指定该张量的每个元素所需的索引的数量。 标量(简单数)是等级0的张量,向量是等级1的张量,矩阵是等级2的张量,3维数组是等级3的张量。张量具有数据类型 和形状(张量中的所有数据项必须具有相同的类型)。

一个四维张量包括(batch, height, width, color channel )

image1 = tf.zeros([7,28,28,3])

虽然TensorFlow可以用于一般的数值计算的许多领域,特别是机器学习,但它的主要研究和开发领域一直是深度神经网络(DNN)的应用,它已被用于各种领域,如 例如,在现在广泛使用的声控助手中进行语音和声音识别; 基于文本的应用程序,如语言翻译器; 图像识别,如外星球狩猎,癌症检测和诊断; 和时间序列应用程序,如推荐系统。

在本章中我们主要介绍以下内容

1.介绍TensorFlow生态系统

2.安装TensorFLow

3.一些实用的TensorFLow操作

现代TensorFlow生态系统介绍

我们来讨论动态图机制(eager execution)。 TensorFlow的第一个版本涉及构建由操作和张量组成的计算图,后者必须随后在Google称为会话(这称为声明性编程)中进行评估。 这仍然是编写TensorFlow程序的常用方法。 然而从研发形式的1.5版本开始,并从1.7版开始动态图机制适用于TensorFlow,涉及对操作的即时评估,结果是张量可以被视为NumPy数组(这被称为命令式编程)。

谷歌表示,动态图机制是研究和开发的首选方法,但计算图表是服务TensorFlow生产应用程序的首选。

tf.data是一个API,允许您从更简单,可重用的部分构建复杂的数据输入管道。 最高级别的抽象是数据集,它包含张量的嵌套结构元素和作用于这些元素的转换计划。 有以下类

· FixedLengthRecordDataset

· TFRecordDataset

· tf.data.Iterator

让我们转到估算器,这是一个高级API,允许您构建大大简化的机器学习程序。 估算人员负责训练,评估,预测和导出服务。

TensorFlow.js是一组API,允许您使用低级JavaScript线性代数库或高级层API构建和训练模型。 因此,可以在浏览器中训练和运行模型。

TensorFlow Lite是TensorFlow的轻量级版本,适用于移动和嵌入式设备。 它由运行时解释器和一组实用程序组成。 我们的想法是,您可以在更高功率的机器上训练模型,然后使用实用程序将模型转换为.tflite格式。 然后,将模型加载到您选择的设备中。 在撰写本文时,TensorFlow Lite在Android和iOS上支持C ++ API,并且具有适用于Android的Java包装器。 如果Android设备支持用于硬件加速的Android神经网络(ANN)API,那么解释器将使用它,否则它将默认为CPU执行。

TensorFlow Hub是一个旨在促进机器学习模型可重用模块的发布,发现和使用的库。 在此上下文中,模块是TensorFlow图形的独立部分及其权重和其他资产。 该模块可以在称为转移学习的方法中在不同的任务中重用。 我们的想法是,您在大型数据集上训练模型,然后针对您的不同但相关的任务重新使用相应的模块。 这种方法带来了许多优势 - 您可以使用较小的数据集训练模型,您可以改进泛化,并且可以显着加快培训速度。

例如,ImageNet数据集与许多不同的神经网络体系结构(如inception_v3)一起非常成功地用于启动许多其他图像处理训练问题。

TensorFlow Extended(TFX)是一个基于TensorFlow的通用机器学习平台。 迄今为止发布的开源库包括TensorFlow Transform,TensorFlow Model Analysis和TensorFlow Serving。

tf.keras是一个用Python编写的高级神经网络API,它与TensorFlow(和各种其他张量工具)接口。 tf.keras支持快速原型设计,用户友好,模块化和可扩展。 它支持卷积和循环网络,并将在CPU和GPU上运行。 Keras是在TensorFlow 2中开发的首选API。

TensorBoard是一套可视化工具,支持TensorFlow程序的理解,调试和优化。 它与eager和graph执行环境兼容。 您可以使用TensorBoard在培训期间可视化模型的各种指标。

最近的一个发展,在撰写本文时仍然非常实验,将TensorFlow直接集成到Swift编程语言中。 Swift中的TensorFlow应用程序是使用命令式代码编写的,即动态图(在运行时)。 Swift编译器自动将此源代码转换为一个TensorFlow图,然后在CPU,GPU和TPU上执行TensorFlow会话的完整性能。

在本书中,我们将重点介绍那些允许我们使用Python 3.6和TensorFlow 2.0.0 alpha版本启动并运行TensorFlow的TensorFlow工具。 特别是,我们将使用动态图机制(Eager Execution)而不是计算图,我们将利用tf.keras的力量尽可能地构建网络,因为它是研究和实验的现代方式。

安装TensorFlow

TensorFlow的最佳编程支持是为Python提供的(虽然Java,C和Go存在库,而其他语言的库正在积极开发中)。

网上有大量关于安装TensorFlow for Python的信息。

谷歌推荐的标准做法是在虚拟环境中安装TensorFlow,即将一组API和代码与其他API和代码以及系统范围的环境隔离开来的环境。

有两个不同版本的TensorFlow,一个用于在CPU上执行,另一个用于在GPU上执行。 最后要求安装数字库CUDA和CuDNN。 Tensorflow将默认为GPU执行。详细请见:https://www.tensorflow.org/beta/guide/using_gpu

使用pip安装TensorFlow 2.0

pip install tensorflow-gpu==2.0.0-alpha0

请事先安装好Nvidia环境以及cuda环境

下一步做什么

我们将首先看看如何导入TensorFlow,然后是TensorFlow编码风格,以及如何进行一些基本的内务管理。 在此之后,我们将介绍一些基本的TensorFlow操作。 您可以为这些代码段创建Jupyter Notebook,也可以使用您喜欢的IDE来创建源代码。

导入TensorFLow

 

import tensorflow as tf
print("TensorFlow version: {}".format(tf.__version__))
print("Eager execution is: {}".format(tf.executing_eagerly()))
print("Keras version: {}".format(tf.keras.__version__))

TensorFlow的编码风格约定

对于Python应用程序,Google遵守PEP8标准惯例。 特别是,它们将CamelCase用于类(例如,hub.LatestModuleExporter)和snake_case用于函数,方法和属性(例如,tf.math.squared_difference)。 谷歌也坚持使用谷歌Python风格指南,可以在以下网址查看详细内容:

https://github.com/google/styleguide/blob/gh-pages/pyguide.md

使用动态图机制(Eager execution)

动态图机制TensorFlow 2中的默认设置。

以下代码可用于查明CPU或GPU是否正在使用:

var = tf.Variable([3, 3])

if tf.test.is_gpu_available(): 
    print('Running on GPU')
    print('GPU #0?')
    print(var.device.endswith('GPU:0'))
else: 
    print('Running on CPU')

声明动态图

声明TensorFLow动态图的方法如下:

t0 = 24
t1 = tf.Variable(42)  # 0 维张量  (标量)
t2 = tf.Variable([ [ [0., 1., 2.], [3., 4., 5.] ], [ [6., 7., 8.], [9., 10., 11.] ] ]) # 3维张量
t0, t1, t2

输出如下:

(24,
 <tf.Variable 'Variable:0' shape=() dtype=int32, numpy=42>,
 <tf.Variable 'Variable:0' shape=(2, 2, 3) dtype=float32, numpy=
 array([[[ 0.,  1.,  2.],
         [ 3.,  4.,  5.]],
         [[ 6.,  7.,  8.],
         [ 9., 10., 11.]]], dtype=float32)>)

TensorFlow将推断数据类型,默认为浮点数的tf.float32和整数的tf.int32(参见前面的例子)。

或者,可以显式指定数据类型,如下所示:

f64 = tf.Variable(89, dtype = tf.float64)
f64.dtype

TensorFlow拥有大量内置数据类型。

示例包括之前看到的那些,tf.int16,tf.complex64和tf.string。 请参阅:

https://www.tensorflow.org/api_docs/python/tf/dtypes/DType

要重新分配变量,请使用var.assign(),如下所示

f1 = tf.Variable(89.)
f1

# <tf.Variable 'Variable:0' shape=() dtype=float32, numpy=89.0>

f1.assign(98.)
f1

# <tf.Variable 'Variable:0' shape=() dtype=float32, numpy=98.0>

声明TensorFlow常量

m_o_l = tf.constant(42)

m_o_l
# <tf.Tensor: id=45, shape=(), dtype=int32, numpy=42>

m_o_l.numpy()

# 42

同样,TensorFlow将推断数据类型,或者可以显式指定,就像变量的情况一样:

unit = tf.constant(1, dtype = tf.int64)

unit

# <tf.Tensor: id=48, shape=(), dtype=int64, numpy=1>

创建张量

张量的形状是通过属性(而不是函数)访问的:

t2 = tf.Variable([ [ [0., 1., 2.], [3., 4., 5.] ], [ [6., 7., 8.], [9., 10., 11.] ] ]) # tensor variable
print(t2.shape)

输出如下:

(2, 2, 3)

可以重新调整张量并保留相同的值,这是构建神经网络时经常需要的。

这是一个样例:

r1 = tf.reshape(t2, [2,6])  # 2 行 6列
r2 = tf.reshape(t2, [1, 12]) # 1 行 12列
r1
# <tf.Tensor: id=33, shape=(2, 6), dtype=float32,
“numpy= array([[ 0., 1., 2., 3., 4., 5.], [ 6., 7., 8., 9., 10., 11.]], dtype=float32)>

这是另一个样例:

r2 = tf.reshape(t2,[1,12]) # 1 row 12 columns
r2
# <tf.Tensor: id=36, shape=(1, 12), dtype=float32, 
numpy= array([[ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11.]], dtype=float32)>

 

张量的维度

张量的等级是它所具有的维数,即指定该张量的任何特定元素所需的索引数。

张量的维度可以用以下方法显示:

tf.rank(t2)

输出如下:

<tf.Tensor: id=53, shape=(), dtype=int32, numpy=3>
(the shape is () because the output here is a scalar value)

 

指定张量元素

 

 

 

继续阅读
ruis
  • 版权声明: 发表于 2019年7月5日17:38:29
  • 转载注明:https://www.ruisfree.com/2019/07/05/tensorflow-2-0-%e5%bf%ab%e9%80%9f%e5%bc%80%e5%8f%91%e6%8c%87%e5%8d%97-%e7%ac%ac%e4%b8%80%e7%ab%a0-tensorflow-2-0-%e4%bb%8b%e7%bb%8d/
TensorFlow 2.0 快速开发指南 - 序言 Tensorflow

TensorFlow 2.0 快速开发指南 – 序言

一、学习本开发指南的必要条件 1.熟悉Python基础语法体系 2.熟悉 Jupyter Notebooks 3.熟悉机器学习、深度学习基本概念和专业术语 二、下载本书代码示例 隐藏的内容 Tenso...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: