本文来自作者 Waves 在 GitChat 上分享 「最新版 TensorFlow 快速入门」,「阅读原文」查看交流实录。
「文末高能」
编辑 | 哈比
一、初识 TensorFlow(简述部分)
TensorFlow 是一个开源软件库,用于使用数据流图进行数值计算。换句话说,即是构建深度学习模型的最佳方式。
本 chat 为 TensotFlow 的入门类,后续博文会逐渐加深学习深度,鉴于是入门类故以操作案例形式交流,以便于快速入门。
下图为近些年主要人工智能包的发展历程。
2018 刚刚开年,深度学习领域就已展现出爆发态势。目前,谷歌宣布发布 TensorFlow 1.5 版本,本 chat 发布时还是 1.4。
最新版本的特性:参见在本 Chat 文末简述的部分:1.5.0 更新了那些新特性。
系统环境如下:
下载 tensorflow1.5:https://pypi.python.org/pypi/tensorflow。
Requires Distributions wheel tensorflow-tensorboard six (>=1.10.0) protobuf (>=3.4.0) numpy (>=1.12.1) mock (>=2.0.0) enum34 (>=1.1.6) backports.weakref (>=1.0rc1) absl-py (>=0.1.6)
慢慢长征路:安装过程如下 。
执行命令安装版本:
pip install D:\office3\python\anaconda3\ tensorflow-1.5.0rc1-cp36-cp36m-win_amd64.whl
执行命令查看版本: pip freeze
基本概念:TensorFlow 是谷歌基于 DistBelief 进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理。
Tensor(张量)意味着 N 维数组,Flow(流)意味着基于数据流图的计算。
TensorFlow 为张量从图象的一端流动到另一端计算过程。TensorFlow 是将复杂的数据结构传输至人工智能神经网中进行分析和处理过程的系统。
原理简述:TensorFlow 是用数据流图(data flow graphs)技术来进行数值计算的。数据流图是描述有向图中的数值计算过程。
有向图中,节点通常代表数学运算,边表示节点之间的某种联系,它负责传输多维数据(Tensors)。
节点可以被分配到多个计算设备上,可以异步和并行地执行操作。因为是有向图,所以只有等到之前的入度节点们的计算状态完成后,当前节点才能执行操作。
参考文章:https://goo.gl/1TLZC8;参考论文:https://goo.gl/XJ1YAY。
张量 Tensor:从向量空间到实数域的多重线性映射(multilinear maps)(v 是向量空间,v* 是对偶空间) 。
你可以把 Tensorflow 的 tensor 看做是一个 n 维的数组或列表,一个 tensor 包含一个静态类型 rank 和一个 shape。
在 Tensorflow 系统中,张量的维数被描述为阶,但是张量的阶和矩阵的阶并不是同一个概念。
张量的阶是张量维数的一个数量描述,下面的张量(使用 python 中 list 定义的)就是 2 阶:
t = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
你可以认为一个二阶张量就是我们平常所说的矩阵,一阶张量可以认为是一个向量。
对于一个二阶张量,你可以使用语句 t[i, j] 来访问其中的任何元素,而对于三阶张量你可以通过 t[i, j, k] 来访问任何元素:
Tensorflow 文档中使用了三种记号来方便地描述张量的维度:阶,形状以及维数。以下展示了它们之间的关系:
除了维度,tensor 有一个数据类型属性。你可以为一个张量指定下列数据类型中的任意一个类型:
① tf.zeros(shape, dtype=tf.float32, name=None)
#tf.zeros([2, 3], int32) ==> [[0, 0, 0], [0, 0, 0]]
② tf.ones(shape, dtype=tf.float32, name=None)
#tf.ones([2, 3], int32) ==> [[1, 1, 1], [1, 1, 1]]
③ tf.zeros_like(tensor, dtype=None, name=None)
新建一个与给定的 tensor 类型大小一致的 tensor,其所有元素为 1。
# 'tensor' is [[1, 2, 3], [4, 5, 6]] tf.ones_like(tensor) ==> [[1, 1, 1], [1, 1, 1]]
④ tf.constant(value, dtype=None, shape=None, name=’Const’) 创建一个常量 tensor,先给出 value,可以设定其 shape:
# Constant 1-D Tensor populated with value list. tensor = tf.constant([1, 2, 3, 4, 5, 6, 7]) => [1 2 3 4 5 6 7] # Constant 2-D tensor populated with scalar value -1. tensor = tf.constant(-1.0, shape=[2, 3]) => [[-1. -1. -1.] [-1. -1. -1.]
⑤ tf.fill(dims, value, name=None)
创建一个形状大小为 dim 的 tensor,其初始值为 value
# Output tensor has shape [2, 3]. fill([2, 3], 9) ==> [[9, 9, 9],[9, 9, 9]]
⑥ tf.ones_like(tensor, dtype=None, name=None)
⑦ tf.range(start, limit, delta=1, name=’range’)
返回一个 tensor 等差数列,该 tensor 中的数值在 start 到 limit 之间,不包括 limit,delta 是等差数列的差值。start,limit 和 delta 都是 int32 类型。
# 'start' is 3 # 'limit' is 18 # 'delta' is 3 tf.range(start, limit, delta) ==> [3, 6, 9, 12, 15] # 'limit' is 5 start is 0 tf.range(start, limit) ==> [0, 1, 2, 3, 4]
⑧ tf.linspace(start, stop, num, name=None) 返回一个 tensor,该 tensor 中的数值在 start 到 stop 区间之间取等差数列(包含 start 和 stop)。
如果 num>1 则差值为 (stop-start)/(num-1),以保证最后一个元素的值为 stop。其中,start 和 stop 必须为 tf.float32 或 tf.float64。num 的类型为 int。
tf.linspace(10.0, 12.0, 3, name="linspace") => [ 10.0 11.0 12.0]
扫描下方二维码,阅读完整原文