Tensorflow基础(1)

名词解释

  • 张量(Tensor): TensorFlow的数据流图由节点和边组成。张量代表的数据流图的边。任意维度的数据统称为张量
  • 残差:实际观察值与训练的估值之间的差
  • 向前传播:张量在数据流图中从前向后流动一遍,为一次向前传播
  • 反向传播:残差从后向前流动一遍就完成一次反向传播

Tensorflow设计理念

TensorFlod的设计理念有两个方面

  1. TensorFlow是符号式编程,如

    1
    2
    t = 8 + 9
    print(t)

    在传统的编程中,这样的代码将会直接执行,但在TensorFlow中:

    1
    2
    3
    import tensorflow as tf
    t = tf.add(8, 9)
    print(t)

    这个输出为Tensor("Add:0", shape=(), dtype=int32),实际上只是定义了一个操作,但没有运行

  2. TensorFlow中涉及的运算都要放在图中,而图的运行只会发生在会话(session)中。

    1
    2
    3
    4
    5
    6
    7
    8
    import tensorflow as tf
    a = tf.constant([1.0, 2.0])
    b = tf.constant([3.0, 4.0])
    c = a * b

    sess = tf.Session()
    print(sess.run(c))
    sess.close()
  3. 编程模型
    3.1 边
    TensorFlow的边有两种连接关系:数据依赖(实线)和控制依赖(虚线)。控制依赖可用于控制操作的运行,这类边上没有数据流过,但源节点必须在目的节点开始前执行完成。常用代码如:

    1
    tf.Graph.control_dependencies(control_inputs)

3.2 张量支持的数据类型
Tensorflow的张量支持下面所有数据类型
|数据类型|Python类型|描术|
|:–|:–|:–|
|DT_FLOAT|tf.float32|32位浮点|
|DT_DOUBLE|tf.float64|64位浮点|
|DT_INT64|tf.int64|64位整型|
|DT_INT32|tf.int32|32位整型|
|DT_INT16|tf.int61|16位整型|
|DT_INT8|tf.int8|8位整型|
|DT_UINT8|tf.uint8|8位无符号整型|
|DT_STRING|tf.string|字符串|
|DT_BOOL|tf.bool|布尔|
|DT_COMPLEX64|tf.complex64|复数,两个32位浮点分别表示实部和虚部|
|DT_QINT32|tf.qint32|用于量化操作的32位整型|
|DT_QINT8|tf.qint8|用于量化操作的位整型|
|DT_QUINT8|tf.quint8|用于量化操作的8位无符号整型|

  1. 编程模型:
    TensorFlow计算过程如下:
    • 从输入开始,经过reshape后往前传播
    • 流经ReLu层(隐层),这里会有两个参数Wh1和bh1,在输出前使用ReLu激活函数作非线性处理
    • 流经Logit(输出层),学习两个参数Wsm和bsm
    • 使用Softmax来计算输出结果中和个类别的概率分布
    • 用交叉熵灭度量源样本的概率分布和输出结果的概率分布间的相似性
    • 计算梯度,这里需要参Wh1/bh1/Wsm/bsm,以及交叉熵后的结果
    • 进入SGD训练,也就是反向传播过程,从上向下的计算每层的参数,并依次更新
      流如下图TensorFlow流