TensorFlow机器学习实战指南之第一章
一、TensorFlow算法的一般流程
1.导入/生成样本数据集
2.转换和归一化数据:一般来讲,输入样本数据集并不符合TensorFlow期望的形状,所以需要转换数据格式以满足TensorFlow。
当数据集的维度或者类型不符合所用机器学习算法的要求时,需要在使用前进行数据转换。大部分机器学习算法期待的输入样本数据是归一化的数据。
TensorFlow具有内建函数来归一化数据,如下:
data = tf.nn.batch_norm_with_global_normalization()
3.划分样本数据集为训练样本集、测试样本集和验证样本集:一般要求机器学习算法的训练样本集和测
试样本集是不同的数据集。另外,许多机器学习算法要求超参数调优,所以需要验证样本集来决定最优的超
参数。
4.设置机器学习参数(超参数):机器学习经常要有一系列的常量参数。例如,迭代次数、学习率,或
者其他固定参数。约定俗成的习惯是一次性初始化所有的机器学习参数,读者经常看到的形式如下:

5.初始化变量和占位符:在求解最优化过程中(最小化损失函数),TensorFlow通过占位符获取数据,
并调整变量和权重/偏差。TensorFlow指定数据大小和数据类型初始化变量和占位符。使用方式如下:

6.定义模型结构:在获取样本数据集、初始化变量和占位符后,开始定义机器学习模型。TensorFlow通
过选择操作、变量和占位符的值来构建计算图。这里给出简单的线性模型:

7.声明损失函数:定义完模型后,需要声明损失函数来评估输出结果。损失函数能说明预测值与实际值
的差距:

8.初始化模型和训练模型:TensorFlow创建计算图实例,通过占位符赋值,维护变量的状态信息。下面
是初始化计算图的一种方式:

9.评估机器学习模型:一旦构建计算图,并训练机器学习模型后,需要寻找某种标准来评估机器学习模
型对新样本数据集的效果。通过对训练样本集和测试样本集的评估,可以确定机器学习模型是过拟合还是欠
拟合。
10.调优超参数:大部分情况下,机器学习者需要基于模型效果来回调整一些超参数。通过调整不同的
超参数来重复训练模型,并用验证样本集来评估机器学习模型。
11.发布/预测结果:所有机器学习模型一旦训练好,最后都用来预测新的、未知的数据。
二、声明张量
TensorFlow的主要数据结构是张量,它用张量来操作计算图。在TensorFlow里可以把变量或者占位符声
明为张量。首先,需要知道如何创建张量。
创建一个张量,声明其为一个变量。TensorFlow在计算图中可以创建多个图结构。这里需要指出,在
TensorFlow中创建一个张量,并不会立即在计算图中增加什么。只有把张量赋值给一个变量或者占位符,
TensorFlow才会把此张量增加到计算图。
这里将介绍在TensorFlow中创建张量的主要方法:
1.固定张量
·创建指定维度的零张量。使用方式如下:

·创建指定维度的单位张量。使用方式如下:

·创建指定维度的常数填充的张量。使用方式如下:

·用已知常数张量创建一个张量。使用方式如下:

2.相似形状的张量
·新建一个与给定的tensor类型大小一致的tensor,其所有元素为0或者1,使用方式如下:

3.序列张量
·TensorFlow可以创建指定间隔的张量。下面的函数的输出跟range()函数和numpy的linspace()函数
的输出相似:

·返回的张量是[0.0,0.5,1.0]序列。注意,上面的函数结果中最后一个值是stop值。另外一个rang()
函数的使用方式如下:

·返回的张量是[6,9,12]。注意,这个函数结果不包括limit值。
4.随机张量
·下面的tf.random_uniform()函数生成均匀分布的随机数

·tf.random_normal()函数生成正态分布的随机数:

·tf.truncated_normal()函数生成带有指定边界的正态分布的随机数,其正态分布的随机数位于指定均
值(期望)到两个标准差之间的区间:

·张量/数组的随机化。tf.random_shuffle()和tf,random_crop()可以实现此功能:

·张量的随机剪裁。tf.random_crop()可以实现对张量指定大小的随机剪裁。在本书的后面部分,会对
具有3通道颜色的图像(height,width,3)进行随机剪裁。为了固定剪裁结果的一个维度,需要在相应的维
度上赋其最大值:

一旦创建好张量,就可以通过tf.Variable()函数封装张量来作为变量。

注:
创建张量并不一定得用TensorFlow内建函数,可以使用tf.convert_to_tensor()函数将任意numpy数组转
换为Python列表,或者将常量转换为一个张量。注意,tf.convert_to_tensor()函数也可以接受张量作为输
入。
三、占位符和变量
使用TensorFlow计算图的关键工具是占位符和变量,也请读者务必理解两者的区别,以及什么地方该用
谁。
使用数据的关键点之一是搞清楚它是占位符还是变量。变量是TensorFlow机器学习算法的参数,
TensorFlow维护(调整)这些变量的状态来优化机器学习算法。占位符是TensorFlow对象,用于表示输入输
出数据的格式,允许传入指定类型和形状的数据,并依赖计算图的计算结果,比如,期望的计算结果。
在TensorFlow中,tf.Variable()函数创建变量,过程是输入一个张量,返回一个变量。声明变量后需要
初始化变量。下面是创建变量并初始化的例子:

占位符仅仅声明数据位置,用于传入数据到计算图。占位符通过会话的feed_dict参数获取数据。在计算
图中使用占位符时,必须在其上执行至少一个操作。在TensorFlow中,初始化计算图,声明一个占位符x,
定义y为x的identity操作。identity操作返回占位符传入的数据本身。结果图将在下节展示,代码如下:

四、矩阵的常用操作
In [3]:
import tensorflow as tf
import numpy as np
sess = tf.Session()
identity_matrix = tf.diag([1.0, 1.0, 1.0]) # 对角阵
print(sess.run(identity_matrix))
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
A = tf.truncated_normal([2, 3])
print(sess.run(A))
[[-0.5786329 1.4652022 0.5517408 ]
[-0.98360574 0.66149354 -0.8040531 ]]
B = tf.fill([2, 3], 5.0)
print(sess.run(B))
[[5. 5. 5.]
[5. 5. 5.]]
C = tf.random_uniform([3, 2])
print(sess.run(C))
[[0.9898286 0.8746687 ]
[0.8308246 0.46435404]
[0.66066265 0.15331614]]
# Create matrix from np array
D = tf.convert_to_tensor(np.array([[1., 2., 3.], [-3., -7., -1.], [0., 5., -2.]]))
print(sess.run(D))
[[ 1. 2. 3.]
[-3. -7. -1.]
[ 0. 5. -2.]]
# Matrix addition/subtraction
print(sess.run(A + B))
[[4.0406456 4.6771774 5.870362 ]
[5.1844687 4.695226 5.8468685]]
# Matrix Multiplication
print(sess.run(tf.matmul(B, identity_matrix)))
[[5. 5. 5.]
[5. 5. 5.]]
# Matrix Transpose 矩阵转置
print(sess.run(tf.transpose(C))) # Again, new random variables
[[0.2655393 0.23314857 0.6464461 ]
[0.5616721 0.39336514 0.9367839 ]]
# Matrix Determinant 行列式
print(sess.run(tf.matrix_determinant(D)))
-37.99999999999999
# Matrix Inverse 逆矩阵
print(sess.run(tf.matrix_inverse(D)))
[[-0.5 -0.5 -0.5 ]
[ 0.15789474 0.05263158 0.21052632]
[ 0.39473684 0.13157895 0.02631579]]
# Cholesky Decomposition 矩阵分解
print(sess.run(tf.cholesky(identity_matrix)))
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
# Eigenvalues and Eigenvectors 矩阵特征值和特征向量
print(sess.run(tf.self_adjoint_eig(D)))
(array([-10.65907521, -0.22750691, 2.88658212]), array([[ 0.21749542, 0.63250104, -0.74339638],
[ 0.84526515, 0.2587998 , 0.46749277],
[-0.4880805 , 0.73004459, 0.47834331]]))
# div() vs truediv() vs floordiv()
print(sess.run(tf.div(3, 4))) # 直接向下取整
0
print(sess.run(tf.truediv(3, 4))) # 小数表示
0.75
print(sess.run(tf.floordiv(3.0, 4.0))) # 向下取整
0.0
# Mod function
print(sess.run(tf.mod(22.0, 5.0))) # 取余
2.0
# Trig functions 三角函数,sin(π)
print(sess.run(tf.sin(3.1416)))
-7.2399803e-06
print(sess.run(tf.cos(3.1416))) # 三角函数,cos(π)
-1.0
# Tangemt
print(sess.run(tf.div(tf.sin(3.1416 / 4.), tf.cos(3.1416 / 4.))))
1.0000036
TensorFlow机器学习实战指南之第一章的更多相关文章
- TensorFlow机器学习实战指南之第二章
一.计算图中的操作 在这个例子中,我们将结合前面所学的知识,传入一个列表到计算图中的操作,并打印返回值: 声明张量和占位符.这里,创建一个numpy数组,传入计算图操作: import tensorf ...
- TensorFlow机器学习实战指南之第二章2
TensorFlow实现反向传播 本节先举个简单的回归算法的例子.这里先举一个简单的例子,从均值1,标准差为0.1的正态分布中随机抽样100个数,然后乘以变量A,损失函数L2正则函数,也就是实现函数X ...
- 学习TF:《TensorFlow机器学习实战指南》中文PDF+英文PDF+代码
从实战角度系统讲解TensorFlow基本概念及各种应用实践.真实的应用场景和数据,丰富的代码实例,详尽的操作步骤,带你由浅入深系统掌握TensorFlow机器学习算法及其实现. <Tensor ...
- 《SDN核心技术剖析和实战指南》第一章小结
第一章主要是概况.新技术有一个特点是,每家都有不同的说法.这里我只说说我比较认同的部分. SDN的核心概念大概有两个:转发面与控制面分离.开发可编程化.书里还说逻辑上集中控制,其实这个就可以从转发与控 ...
- PMP备考指南之第一章:引论
本文已同步至 GitHub/Gitee/公众号,感兴趣的同学帮忙点波关注~ 第一章 引论 1."项目管理知识体系":应该包含所有行业.应用领域项目管理的具体知识.技能.方法和实践 ...
- Gradle2.0用户指南翻译——第一章. 介绍
翻译项目请关注Github上的地址:https://github.com/msdx/gradledoc本文翻译所在分支:https://github.com/msdx/gradledoc/tree/2 ...
- Sklearn 与 TensorFlow 机器学习实战—一个完整的机器学习项目
本章中,你会假装作为被一家地产公司刚刚雇佣的数据科学家,完整地学习一个案例项目.下面是主要步骤: 项目概述. 获取数据. 发现并可视化数据,发现规律. 为机器学习算法准备数据. 选择模型,进行训练. ...
- 【机器学习实战】第5章 Logistic回归
第5章 Logistic回归 Logistic 回归 概述 Logistic 回归虽然名字叫回归,但是它是用来做分类的.其主要思想是: 根据现有数据对分类边界线建立回归公式,以此进行分类. 须知概念 ...
- 【机器学习实战】第13章 利用 PCA 来简化数据
第13章 利用 PCA 来简化数据 降维技术 场景 我们正通过电视观看体育比赛,在电视的显示器上有一个球. 显示器大概包含了100万像素点,而球则可能是由较少的像素点组成,例如说一千个像素点. 人们实 ...
随机推荐
- 重新复习~ 为了重新找工作 - > XMLHttpRequest2.0 Jsonp nodeType 节点 webpack基本搭建 闭包的一句话总结
XMLHttpRequest2.0 1.可以设置超时 (xhr.timeout = 1000; ontimeout()函数) 2.支持FormData对象管理表单数据(new FormData 方法: ...
- 强行画页面的position
说到position这个属性,确实是让刚入前端坑的我等小白瑟瑟发抖,大牛们一边告诉我们position如何万能,一边又让我们在这个坑里滚了一遍又一遍,着实让我们的头皮表面的毛囊扩张的更厉害了.在前端的 ...
- java中的常用特殊字符
1.转义字符反斜杠(\) 我们知道html中大都是双标签,如果在标签内想要输出带有标签结束符的文本都必须进行转义,html中是采用对应的字符替换,如<可用<替换 在java当中,我们要转义 ...
- YYY0.1YYY
XXX0.2XXXZZZ目前提供免费下载和自动更新功能,由于自己的时间有限,就我一个开发,后期持续更新在线听歌.mp4转mp3.高音质下载.全球dj网站免费下载功能!ZZZ
- 第九章:Servlet工作原理解析
9.1 从Servlet容器说起 Servlet和Servlet容器的关系,就像枪和子弹的关系,彼此依存又互相独立发展,这一切都是为了适应工业化生产.从技术角度来说,是为了解耦,通过标准化接口来互相协 ...
- unsigned long long类型与long long类型
最近做题的时候,经常遇到范围是2^63,取模2^64的这种题目.遇到这种限制条件时就要想到用unsigned long long类型. 可以简洁地声明为typedef unsigned long lo ...
- SqlServer 游标逐行更新数据,根据上一行的数据来更新当前行
工作中用到的记录一下,游标的详细定义及说明请百度 --游标格式化数据 DECLARE cursor_jxsmb CURSOR FOR --定义一个游标 SELECT F0 FROM dbo.JXSMB ...
- h5页面使用sessionStorage滚动到上次浏览器位置《原创》
前言: 因最近移动端开发过程中遇到一个运营提出的所谓技术难点需求,对于原生APP来说轻而易举,毕竟自己的APP用户操作指哪打哪,但是H5该怎么做?H5就实现不了么?对于一个爱研究攻克这些前端棘手问题的 ...
- 实践练习_使用HTML标签制作一个注册界面03
使用HTML标签制作一个注册界面▲▲▲▲★1) 注册界面需要有用户名.密码.性别(单选).爱好(多选).专业(下拉列表)2) 注册界面需要有隐藏域和文件域3) 注册界面需要有提交和重置按钮4) 将上述 ...
- iOS 二维码 学习
这段时间忙着交接工作,找工作,找房子,入职,杂七杂八的,差不多一个月没有静下来学习了.这周末晚上等外卖的时间学习一下二维码的制作与扫描. 项目采用OC语言,只要使用iOS自带的CoreImage框架, ...