TensorFlow for Dummies学习笔记(一)

Introduction

About This Book

机器学习借鉴了多个数学分支,不幸的是真实的世界并不觉得有任务义务按数学行事。即使用了最好的数学模型,你仍然有可能以糟糕的结果告终。TensorFlow并非要给你分析一个系统的理想模型,而是帮你减少机器学习开发花费的时间和遇到的挫折。

Chapter 1: Introducing Machine Learning with TensorFlow

Understanding Machine Learning

机器学习通过发现大量数据中的模式,处理邮件分类、路线规划、商品推荐等不确定事件。

The Development of Machine Learning

统计回归仍然在机器学习中扮演重要角色。最新的突破是在神经网络获得的。神经网络是对大脑的逆向工程,曾经因为计算能力和编程技术(缺乏框架,类库)的限制,机器学习的理论相对成熟而应用较少。随着大量数据的累积,计算能力和技术的进步,机器学习开始流行。

Machine Learning Frameworks

机器学习框架常起步于数值计算类库或工具集,目前流行的有5个:

> TORCH 第一个机器学习框架,使用Lua作为接口语言限制了其推广;

> THEANO 因其高性能和支持自动微分,开发多用其作为数值计算工具;

> CAFFE 用C++实现支持GPU加速,受学术和企业届欢迎;

> KERAS 更强调开发的便利性,可作为其它框架的接口;

> TENSORFLOW 兼具高性能和开发便利性。

Chapter 2: Getting Your Feet Wet

Exploring the TensorFlow Installation

安装TensorFlow以后,常用的Python包有:

> tensorflow 框架的中心包,常引入为tf

> tf.train 和训练相关的优化器和其它类

> tf.nn 神经网络类和相关的数学操作

> tf.layers 多层神经网络相关的函数

Setting the Style

Google推荐的编码规范:https://www.tensorflow.org/community/style_guide

Python官方的编码规范:https://www.python.org/dev/peps/pep-0008/

Chapter 3: Creating Tensors and Operations

Tensor可以理解为多维数组。

Creating Tensors

在TensorFlow中为类Tensor的实例。Tensor可以包含数值(默认float32, int32等)、布尔或字符串类型元素,一个Tensor只能含有一种类型。不同于通常的类实例,Tensor需通过API创建,变换或者操作。

Creating Tensors with Known Values

常用tf.constant(array),还有tf.zeros, tf.ones, tf.fill, tf.linespace, tf.range等函数可用。

Creating Tensors with Random Values

使用tf.random_normal(shape)等。

Transforming Tensors

使用tf.reshape(tensor, shape),tf.reverse(tensor, axis)等。

tf.reverse(tf.constant([1, 2, 3], [4, 5, 6]]), [0])结果为[[4, 5, 6], [1, 2, 3]]

Creating Operations

调用操作函数时并不马上执行,而是加入到当前的图中,待session执行图时执行,因此称作Creating Operations。

基本数学操作(shape相同,按元素操作):tf.add, tf.multiply等

取整,比较操作:tf.round, tf.maximum等

向量和矩阵操作:tf.tensordot, tf.matmul等

Chapter 4: Executing Graphs in Sessions

创建操作时加入图而不马上执行,原因是图可导出到文件或者在远程系统加载。

Forming Graphs

用tf.get_default_graph()获得当前的图。

用 with tf.Graph().as_default(): 创建并切换到新的图。

用tf.train.write_graph将图写入文件。

Creating and Running Sessions

常用 with tf.Session() as sess: 创建一个新Session。

用sess.run(fetches, feed_dict=None, options=None, run_metadata=None)执行Session,通常返回和fetches形状相同的narray。也可使用res1, res2 = sess.run([t1, t2])同时执行两个Tensor并返回。

Writing Messages to the Log

可使用tf.logging.info()等函数输出分级别的日志。

Visualizing Data with TensorBoard

使用tf.summary包中的函数创建并输出sacalar, histogram等图形,可在TensorBoard中显示图形。执行tensorboard --logdir=outpu启动。

Chapter 5: Training

Training in TensorFlow

训练流程包括4步:

1. 构建一个模型的数学表达式,包括输入输出和训练中被更新的变量;

2. 定义一个测量模型输出和实际值之间差异的误差表达式,使用误差表达式创建一个Optimizer,并调用其minimize方法;

3. 配置提供训练数据的feed_dict;

4. 调用session的run方法,执行训练。

Formulating the Model

本书中一类是回归模型,一类是神经网络模型。

Tensorflow中,可训练的参数是Variable类的实例。

Looking at Variables

Variable与Tensor相似,都可以表示为多维数组,但Variable仅用于存储训练中被更新的数据。需用不同的API创建。使用tf.Variable(_aTensor)创建Variable。需创建一个初始化操作,并在session中执行。常用tf.global_variables_initializer()。

Determining Loss

TensorFlow中文档中loss是机器学习文献中常出现的cost。Mean squired error是一种计算表达式模型loss的常用方法:sum((yo-y)^2)/N。神经网络模型不能以简单的等式计算loss。

Minimizing Loss with Optimization

优化器(Optimizer)的minimize(loss)方法,返回一个可以被sess.run()执行的operation。训练的过程即多轮执行优化器的最小化操作。

梯度下降法(GradientDescentOptimizer):函数的梯度是一个vector,元素为函数在各维度上的偏微分。梯度的方向可以理解为向高点最陡峭的方向,而梯度的反方向为向低点最陡峭的方向。梯度下降法沿着梯度的反方向移动,以求解最小值。优点是一个古老,简单,易于理解的算法。缺点为,可能找到了局部最小值;通常缓慢收敛到最小值;仅可用于可微分的函数;可能因learning rate选择不当而振荡无法到达最小值。

除了梯度下降法,还有MomentumOptimizer, AdagradOptimizer, AdamOptimizer等优化器。

Feeding Data into a Session

使用tf.placeholder(dtype, shape=None, name=None)创建一个占位符;在模型和损失函数中使用占位符;在sess.run中使用feed_dict向占位符喂数。

Saving and Restoring Variables

使用tf.train.Saver保存参数。取回参数分为两步:使用1) saver = tf.train.import_meta_graph加载到当前graph,使用restore访问变量。

Working with SavedModels

作为Saver的替代,可以创建一个SavedModel存储应用的整个模型。

Session Hooks

可以实现一些回调函数,当某一事件发生时执行,如after_create_session, before_run, after_run等。

词汇表

Tensor 张量。tensor可以理解为多维数组,0维张量为scalar 标量,1维张量为vector 矢量,2维张量为matrix 矩阵。在TensorFlow中:

> tensor是Tensor类的实例

> tensor的元素可以为数值、字符串或布尔值,但一个tensor内的所有元素需类型一致

> tensor的创建、转换和操作需使用tensorflow中的函数来执行

TensorFlow Google提供的用于开发机器学习应用的框架
Transforming tensorflow包中提供的一类函数,用于在tensor创建后,更新tensor的形状,如reshape
Operation 可理解为tensorflow包中提供的对tensor做操作的函数,如初始化、数学运算。操作本身只定义执行,要执行操作,需放在sess.run()的fetches参数中
Graph tensorflow的函数(creates, transforms, processes),并不执行操作,而是将操作增加到一个数据结构,即图中。当session执行图时,操作才真正被执行。图的优点在于可以导出为文件,或者加载到远程系统。graph无需显式创建,可通过tf.get_default_graph()获取到默认
TensorBoard 在网页中图形化显示tensorflow应用数据的实用程序。
summary data

TensorBoard所需的特殊结构的数据。

summary operation tf.summary中的一类Operation,用于给TensorBorard供summary data,执行时将相关数据写入缓冲区。例如scalar, histogram。
Variable 与tensor类似,以多维数组存储数据,可被Operations操作。用于存储训练中被更新的数据(变量)。变量是Variable类的实例,需在session执行前初始化。
Loss 机器学习文献中常称为cost function, 可理解为模型输出和实测值(observed value)间的差。
Optimization 更新模型中的变量,以最小化loss的过程。tf.train中提供了多种优化算法,选择适当的算法可以优化应用的性能。
Gradient Descent Optimizer 函数的梯度是一个vector,元素为函数在各维度上的偏微分。梯度的方向可以理解为向高点最陡峭的方向,而梯度的反方向为向低点最陡峭的方向。梯度下降法沿着梯度的反方向移动,以求解最低点(最小值)

Momentum Optimizer

动量优化是在梯度下降基础之上的改进,之前的优化结果影响未来的优化,以更快的趋近极小值。这种影响通常是“衰减”的,使用因子0.9。
Adagrad Optimizer Gradient descent和momentum算法都有一个缺点:在每个被训练变量上使用了相同的learning rate,但不同的变量可能以不同的速率收敛。Adagrad = Adaptive Subgradient, 此法通过自适应梯度优化改进了这点。
Adam Optimizer Adam = Adaptive Moment Estimation,与Adagrad和Momentum算法都相似的算法。
Placeholder 占位符。一个placeholder是一个常量tensor,持有session中用于喂数的一批数据。使用tf.placeholder创建placeholder时需指定类型,可指定形状。
stochasticity 随机性。为了能找到全局最小值,随机性算法将数据分为若干个小batch,将其随机喂给sess。
SGD =Stochastic gradient descent,随机梯度下降算法

 

你可能感兴趣的:(实用技术)