一.基本概念

  • 张量:张量就是多维数组(列表),用“阶”表示张量的维度。 
      0阶张量称为标量,表示一个单独的数;如 S=123;
      1阶张量称为向量,表示一个一维数组;如V=[1,2,3]
      2阶张量称为矩阵,表示一个二维数组,可以有i行j列个元素;
  • 基于TensorFlow的神经网络:用张量表示数据,用计算图搭建神经网络,用会话(Session)执行计算图,优化线上的权重(参数),得到模型。
  • TensorFlow的数据类型有float32和int32等

二.举例

实现TensorFlow的加法:

import tensorflow as tf # 导入TensorFlow a = tf.constant([[1.0, 2.0]]) # 定义张量  b = tf.constant([[3.0], [4.0]]) # 上面有提到 二阶张量实际就是矩阵 result = a+b print(result) 

打印结果:

Tensor("add:0", shape=(2, 2), dtype=float32)

这个表示节点,也是一个张量,名称为add:0。上面有提到如果想要计算出结果,可以用会话(Session)计算结果,将代码改成:

import tensorflow as tf a = tf.constant([[1.0, 2.0]]) b = tf.constant([[3.0], [4.0]]) result = a+b # 使用Session计算结果 with tf.Session() as sess: print(sess.run(result)) 

运行结果:

[[4. 5.]
 [5. 6.]]

三.搭建简单的计算图

神经网络的基本模型就是神经元,而神经元的基本模型就是数学中的乘,加运算。我们来搭建如下的计算图:
 
图中X1和X2表示输入,W1和W2分别是 输入到y的权重,即y = x1w1 + x2w2
我们可以使用TensorFlow的tf.matmul()方法来实现,用代码实现如下:

import tensorflow as tf a = tf.constant([[1.0, 2.0]]) b = tf.constant([[3.0], [4.0]]) # 用matmul()实现a,b矩阵的乘法 y = tf.matmul(a, b) print(y) 

执行结果:

Tensor("MatMul:0", shape=(1, 1), dtype=float32) 

执行结果表示y只是一个张量,只是在计算过程中的一个节点,并没有进行运算,如果想要进行运算,同上使用会话(Session)就行,将代码改成:

import tensorflow as tf

a = tf.constant([[1.0, 2.0]])
b = tf.constant([[3.0], [4.0]])

y = tf.matmul(a, b)

with tf.Session() as sess:
    # 打印出计算结果
    print(sess.run(y))

执行结果:

[[11.]]

这表示y的计算结果就是11;因为根据矩阵乘法:1×3 + 2×4 = 11


四.神经网络的参数

 神经网络的参数是指神经元线上的权重w,用变量表示,一般会先随机生成这些参数,最后经过反向传播(后面会提到)不断优化参数。                     使用tf.Variable生成参数w,tf.Variable的参数就是生成w的方式,在神经网络中常用的生成随机数/数组的函数如下:  
tf.random_normal()      # 生成正太分布的随机数
tf.truncated_normal()   # 生成去掉过大偏离点的正态分布随机数
tf.random_uniform()     # 生成均匀分布随机数
tf.zeros()              # 生成全0数组
tf.ones()               # 生成全1数组
tf.fill()               # 生成全定值数组
tf.constant()           # 生成给定值的数组