网络的结构
这是一个全连接的神经网络。(相邻两层之间任意两个节点都有连接)
前向传播算法示意图:
将输入x1、x2组织成一个12的矩阵x=[x1, x2], 而W1组织成一个23的矩阵:
通过矩阵乘法就可以得到隐藏层三个节点的向量取值:
类似输出层可以表示为矩阵的形式:
所以就可以得到前向传播过程的TensorFlow实现。
a = tf.matmul(x, w1) # tf.matmul实现了矩阵乘法的功能
y = tf.matmul(a, w2)
实现一个前向传播算法
Tensorflow的变量声明函数为tf.Variable(), 其作用为保存和更新神经网络中的参数。TensorFlow中的变量需要指定初始值,初始值可以设置成随机数、常数或者是通过其他变量的计算得到。一般使用随机数给TensorFlow中的变量初始化。
使用变量实现的向前传播算法
import tensorflow as tf
# tf.random_normal产生的随机数服从正态分布,主要用于平均值,标准差,取值类型的参数
# 设定随机种子为1,可以保证每次得到的结果是一致的
w1 = tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1))
w2 = tf.Variable(tf.random_normal([3, 1], stddev=1, seed=1))
# 将输入的特征向量定义为一个常量
x = tf.constant([[0.7, 0.9]])
# 通过前向传播算法获得神经网络的输出
# matmul为矩阵乘法
a = tf.matmul(x, w1)
y = tf.matmul(a, w2)
sess = tf.Session()
# 这里不能直接通过sess.run(y)来获得y的取值,因为w1和w2还没进行初始化过程
sess.run(w1.initializer)
sess.run(w2.initializer)
print(sess.run(y)