zoukankan      html  css  js  c++  java
  • 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
    
    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
    
     
  • 相关阅读:
    【Go语言系列】2.3、Go语言基本程序结构:变量及常量
    【Go语言系列】2.2、Go语言基本程序结构:关键字与标识符
    【Go语言系列】2.1、Go语言基本程序结构:注释
    【Go语言系列】第三方框架和库——GIN:快速入门
    【Go语言系列】第三方框架和库——GIN:GIN介绍
    【Go语言系列】1.4、GO语言简介:第一个Go语言程序
    【Go语言系列】1.3、GO语言简介:Go语言开发的知名项目
    【Go语言系列】1.2、GO语言简介:哪些大公司正在使用Go语言
    【Go语言系列】1.1、GO语言简介:什么是GO语言
    CentOS自行编译升级Git
  • 原文地址:https://www.cnblogs.com/xinmomoyan/p/10777776.html
Copyright © 2011-2022 走看看