机器学习的基础整理——前向传播
先祭出我在书本上拍照的前向传播结构图
一个最简单的前向传播过程有:
输入层(是实体提取的特征向量)
隐藏层(是输入输出之间的连接关系,也是比较抽象模糊的一层)
输出层(给出改传播的结果)
图中a11的值由输入层的值和权重决定
a11=x1W(1,1)+x2W(2,1)
哎哟,看起来我要写好多加法,还有好多变量
试想如果有多个输入层节点,那么隐藏层的节点也会成倍增加
所以我们用矩阵的方法来记录隐藏层的值
我们把输入层的特征写成一个矩阵,
矩阵输入层:matrix_input
[x1,x2]
那么输入层的权重:matrix_weight(w1)
[[W(1,1),W(1,2),W(1,3)],
[W(2,1),W(2,2),W(2,3)]]
所以隐藏层的矩阵就变成了
matrix_input*matrix_weight
a=[x1W(1,1)+x2W(2,1),x1W(1,2)+x2W(2,2),x1W(1,3)+x2W(2,3)]
即a=tf.matmul(x,w1)
这里需要矩阵的知识
所以输出层就是 隐藏层的矩阵(a)*隐藏层的权重(w2)
y=tf.matmul(a,w2)
到此,就完成了一个前向传播的计算过程
代码:
# 模拟单个神经网络的计算
# create weight
# w1是输入层的权重矩阵,他的shape是[2,3],即2维数组,长度为3,
w1 = tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1))
# w2是隐藏层的权重矩阵,shape是[3,1],即3维数组,长度为1
w2 = tf.Variable(tf.random_normal([3, 1], stddev=1, seed=1))
# create input x shape(1,2)
x = tf.constant([[0.7, 0.9]])
# 先计算隐藏层的数据,x的输出,y的输入
a = tf.matmul(x, w1)
# 计算y
y = tf.matmul(a, w2)
with tf.Session() as sess:
tf.global_variables_initializer().run()
print(y.eval())