机器学习入门——前向传播

2017-11-08  本文已影响410人  space0o0

机器学习的基础整理——前向传播

IMG_0119.JPG

先祭出我在书本上拍照的前向传播结构图

一个最简单的前向传播过程有:
输入层(是实体提取的特征向量)
隐藏层(是输入输出之间的连接关系,也是比较抽象模糊的一层)
输出层(给出改传播的结果)

图中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())
上一篇下一篇

猜你喜欢

热点阅读