一、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
In [4]:
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.]]
In [5]:
A = tf.truncated_normal([2, 3])
print(sess.run(A))
 
[[-0.5786329   1.4652022   0.5517408 ]
[-0.98360574 0.66149354 -0.8040531 ]]
In [6]:
B = tf.fill([2, 3], 5.0)
print(sess.run(B))
 
[[5. 5. 5.]
[5. 5. 5.]]
In [7]:
C = tf.random_uniform([3, 2])
print(sess.run(C))
 
[[0.9898286  0.8746687 ]
[0.8308246 0.46435404]
[0.66066265 0.15331614]]
In [8]:
# 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.]]
In [9]:
# Matrix addition/subtraction
print(sess.run(A + B))
 
[[4.0406456 4.6771774 5.870362 ]
[5.1844687 4.695226 5.8468685]]
In [10]:
# Matrix Multiplication
print(sess.run(tf.matmul(B, identity_matrix)))
 
[[5. 5. 5.]
[5. 5. 5.]]
In [11]:
# Matrix Transpose 矩阵转置
print(sess.run(tf.transpose(C))) # Again, new random variables
 
[[0.2655393  0.23314857 0.6464461 ]
[0.5616721 0.39336514 0.9367839 ]]
In [12]:
# Matrix Determinant 行列式
print(sess.run(tf.matrix_determinant(D)))
 
-37.99999999999999
In [13]:
# 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]]
In [14]:
# Cholesky Decomposition 矩阵分解
print(sess.run(tf.cholesky(identity_matrix)))
 
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
In [15]:
# 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]]))
In [16]:
# div() vs truediv() vs floordiv()
print(sess.run(tf.div(3, 4))) # 直接向下取整
 
0
In [17]:
print(sess.run(tf.truediv(3, 4)))  # 小数表示
 
0.75
In [18]:
print(sess.run(tf.floordiv(3.0, 4.0)))  # 向下取整
 
0.0
In [19]:
# Mod function
print(sess.run(tf.mod(22.0, 5.0))) # 取余
 
2.0
In [20]:
# Trig functions 三角函数,sin(π)
print(sess.run(tf.sin(3.1416)))
 
-7.2399803e-06
In [21]:
print(sess.run(tf.cos(3.1416)))  # 三角函数,cos(π)
 
-1.0
In [22]:
# Tangemt
print(sess.run(tf.div(tf.sin(3.1416 / 4.), tf.cos(3.1416 / 4.))))
 
1.0000036
 

TensorFlow机器学习实战指南之第一章的更多相关文章

  1. TensorFlow机器学习实战指南之第二章

    一.计算图中的操作 在这个例子中,我们将结合前面所学的知识,传入一个列表到计算图中的操作,并打印返回值: 声明张量和占位符.这里,创建一个numpy数组,传入计算图操作: import tensorf ...

  2. TensorFlow机器学习实战指南之第二章2

    TensorFlow实现反向传播 本节先举个简单的回归算法的例子.这里先举一个简单的例子,从均值1,标准差为0.1的正态分布中随机抽样100个数,然后乘以变量A,损失函数L2正则函数,也就是实现函数X ...

  3. 学习TF:《TensorFlow机器学习实战指南》中文PDF+英文PDF+代码

    从实战角度系统讲解TensorFlow基本概念及各种应用实践.真实的应用场景和数据,丰富的代码实例,详尽的操作步骤,带你由浅入深系统掌握TensorFlow机器学习算法及其实现. <Tensor ...

  4. 《SDN核心技术剖析和实战指南》第一章小结

    第一章主要是概况.新技术有一个特点是,每家都有不同的说法.这里我只说说我比较认同的部分. SDN的核心概念大概有两个:转发面与控制面分离.开发可编程化.书里还说逻辑上集中控制,其实这个就可以从转发与控 ...

  5. PMP备考指南之第一章:引论

    本文已同步至 GitHub/Gitee/公众号,感兴趣的同学帮忙点波关注~ 第一章  引论 1."项目管理知识体系":应该包含所有行业.应用领域项目管理的具体知识.技能.方法和实践 ...

  6. Gradle2.0用户指南翻译——第一章. 介绍

    翻译项目请关注Github上的地址:https://github.com/msdx/gradledoc本文翻译所在分支:https://github.com/msdx/gradledoc/tree/2 ...

  7. Sklearn 与 TensorFlow 机器学习实战—一个完整的机器学习项目

    本章中,你会假装作为被一家地产公司刚刚雇佣的数据科学家,完整地学习一个案例项目.下面是主要步骤: 项目概述. 获取数据. 发现并可视化数据,发现规律. 为机器学习算法准备数据. 选择模型,进行训练. ...

  8. 【机器学习实战】第5章 Logistic回归

    第5章 Logistic回归 Logistic 回归 概述 Logistic 回归虽然名字叫回归,但是它是用来做分类的.其主要思想是: 根据现有数据对分类边界线建立回归公式,以此进行分类. 须知概念 ...

  9. 【机器学习实战】第13章 利用 PCA 来简化数据

    第13章 利用 PCA 来简化数据 降维技术 场景 我们正通过电视观看体育比赛,在电视的显示器上有一个球. 显示器大概包含了100万像素点,而球则可能是由较少的像素点组成,例如说一千个像素点. 人们实 ...

随机推荐

  1. react-native 安装的时候遇到的问题

    JAVA  JDK必须要版本8以上(卡了我好大一会,不要忘了环境变量换成8的路径) 这个报错是因为我的版本没升级? 总之解决方法如下 给升级下就好啦~ 然后出现个这么个问题,是因为我用的测试手机是红米 ...

  2. ESP系列MQTT数据通信

    1.使用一个深圳四博智联科技有限公司的NODEMCU开发板. 2.下载MQTT的SDK压缩包,请查看附件. 3.用官方提供的Eclipse打开MQTT的sdk开发包. 4.打开include文件夹中的 ...

  3. python "import this"

    The Zen of Python, by Tim Peters Beautiful is better than ugly.Explicit is better than implicit.Simp ...

  4. SharePoint Framework 基于团队的开发(三)

    博客地址:http://blog.csdn.net/FoxDave 用内部包进行开发 由于你的团队在开发客户端解决方案,你很可能构建通用代码库来在项目中重用.在很多情况下这种库包含的代码是内部所有的不 ...

  5. 173zrx个人简介

    码云链接:https://gitee.com/zhrx-617/codes/947dbs2fi5kw3jz8hc0ma74 效果图: 源代码: <html> <head> &l ...

  6. Python机器学习(基础篇---监督学习(线性分类器))

    监督学习经典模型 机器学习中的监督学习模型的任务重点在于,根据已有的经验知识对未知样本的目标/标记进行预测.根据目标预测变量的类型不同,我们把监督学习任务大体分为分类学习与回归预测两类.监督学习任务的 ...

  7. Hello1 web

    <?xml version="1.0" encoding="UTF-8"?>     xml版本,指定编码格式 <web-app versio ...

  8. cmake jni简说

    CMake配置Jni开发 1 安装工具 2 新建项目,注意include C++ support选项 项目创建好后查看目录结构 新增三块.externalNativeBuild:cpp(c.c++代码 ...

  9. 记Weblogic部署BUG(websocket)

    将含有websocket的SSM项目部署在Weblogic上面,遇到websocket报错如下 java.lang.ClassCastException: org.springframework.se ...

  10. python基础一之while循环随机猜数字

    # Author:"Mamba" import random setNum = random.randint(1,10) #print(setNum) count = 0 whil ...