TensorFlow--(二)前向传播算法

前向传播算法 forward-propagation

三层全连接网络

有两个输入,一个是零件的长度 x 1 x_1 x1,一个是零件的质量 x 2 x_2 x2

有三个神经元(节点) a 11 , a 12 , a 13 a_{11},a_{12},a_{13} a11,a12,a13

有一个输出y

输入层与隐藏层之间的参数是 W ( 1 ) W^{(1)} W(1)

隐藏层与输出层之间的参数是 W ( 2 ) W^{(2)} W(2)

参数 W W W表示神经元(节点)的参数,其中上标表明了神经元的层数,下标表明了连接节点编号

W ( 1 ) W^{(1)} W(1)表示第一层节点的参数, W 1 , 2 ( 1 ) W^{(1)}_{1,2} W1,2(1)表示 x 1 x_1 x1 a 12 a_{12} a12节点边上的权重

W ( 2 ) W^{(2)} W(2)表示第二层节点的参数

W ( 1 ) = [ W 1 , 1 ( 1 ) W 1 , 2 ( 1 ) W 1 , 3 ( 1 ) W 2 , 1 ( 1 ) W 2 , 2 ( 1 ) W 2 , 3 ( 1 ) ] a ( 1 ) = [ a 11 , a 12 , a 13 ] W^{(1)}= \begin{bmatrix} W_{1,1}^{(1)} & W_{1,2}^{(1)} & W_{1,3}^{(1)} \\ W_{2,1}^{(1)} & W_{2,2}^{(1)} & W_{2,3}^{(1)} \\ \end{bmatrix} \\ a^{(1)}= \begin{bmatrix} a_{11}, & a_{12}, & a_{13} \\ \end{bmatrix} W(1)=[W1,1(1)W2,1(1)W1,2(1)W2,2(1)W1,3(1)W2,3(1)]a(1)=[a11,a12,a13]

x W ( 1 ) = [ x 1 , x 2 ] [ W 1 , 1 ( 1 ) W 1 , 2 ( 1 ) W 1 , 3 ( 1 ) W 2 , 1 ( 1 ) W 2 , 2 ( 1 ) W 2 , 3 ( 1 ) ] = [ W 1 , 1 ( 1 ) x 1 + W 2 , 1 ( 1 ) x 2 , W 1 , 2 ( 1 ) x 1 + W 2 , 2 ( 1 ) x 2 , W 1 , 3 ( 1 ) x 1 + W 2 , 3 ( 1 ) x 2 ] xW^{(1)}= \begin{bmatrix} x_1, & x_2 \end{bmatrix} \begin{bmatrix} W_{1,1}^{(1)} & W_{1,2}^{(1)} & W_{1,3}^{(1)} \\ W_{2,1}^{(1)} & W_{2,2}^{(1)} & W_{2,3}^{(1)} \\ \end{bmatrix}= \begin{bmatrix} W_{1,1}^{(1)}x_1 + W_{2,1}^{(1)}x_2,W_{1,2}^{(1)}x_1 + W_{2,2}^{(1)}x_2,W_{1,3}^{(1)}x_1 + W_{2,3}^{(1)}x_2 \end{bmatrix} xW(1)=[x1,x2][W1,1(1)W2,1(1)W1,2(1)W2,2(1)W1,3(1)W2,3(1)]=[W1,1(1)x1+W2,1(1)x2,W1,2(1)x1+W2,2(1)x2,W1,3(1)x1+W2,3(1)x2]

[ y ] = a ( 1 ) W ( 2 ) = [ a 11 , a 12 , a 13 ] [ W 1 , 1 ( 2 ) W 2 , 1 ( 2 ) W 3 , 1 ( 2 ) ] = [ W 1 , 1 ( 1 ) a 11 + W 2 , 1 ( 2 ) a 12 + W 3 , 1 ( 2 ) a 13 ] \begin{bmatrix} y \end{bmatrix}= a^{(1)}W^{(2)}= \begin{bmatrix} a_{11}, & a_{12}, & a_{13} \\ \end{bmatrix} \begin{bmatrix} W_{1,1}^{(2)} \\ W_{2,1}^{(2)} \\ W_{3,1}^{(2)} \\ \end{bmatrix}= \begin{bmatrix} W_{1,1}^{(1)}a_{11} + W_{2,1}^{(2)}a_{12} + W_{3,1}^{(2)}a_{13} \end{bmatrix} [y]=a(1)W(2)=[a11,a12,a13]W1,1(2)W2,1(2)W3,1(2)=[W1,1(1)a11+W2,1(2)a12+W3,1(2)a13]

import tensorflow as tf

#声明 w1,w2 两个变量,还通过seed参数设置了随机种子
w1= tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1))    #2x3矩阵,2行3列
w2= tf.Variable(tf.random_normal([3, 1], stddev=1, seed=1))    #3x1矩阵,3行1列
#将输入的特征向量定义为一个常量
x = tf.constant([[0.7, 0.9]])


a = tf.matmul(x, w1)
y = tf.matmul(a, w2)

sess = tf.Session()
sess.run(w1.initializer)    #初始化w1
sess.run(w2.initializer)    #初始化w2
print(sess.run(y))  
sess.close()
[[3.957578]]

tf.Variable() 作用是保存和更新神经网络中的参数

tf.random_normal([2,3],stddev=2)会产生一个2x3的矩阵,矩阵中的元素是均值为0,标准差为2的随机数

print(tf.random_normal([2,3],stddev=1,seed=1))
Tensor("random_normal_2:0", shape=(2, 3), dtype=float32)

通过placeholder实现前向传播算法

TensorFlow 提供了 placeholder 机制用于提供输入数据.
placeholder相当于定义了一个位置,这个位置中的数据在程序运行时再指定.
这样在程序运行中就不需要生成大量常量来提供输入数据,而只需要将数据通过placeholder传入TensorFlow计算图
在placeholder定义时, 这个位置上的数据类型是需要指定的.和其他张量一样, placeholder的类型也是不可以改变的.
placeholder中数据的维度信息可以根据提供的数据推导得出,所以不一定要给出

import tensorflow as tf
w1= tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1))    #2x3矩阵,2行3列
w2= tf.Variable(tf.random_normal([3, 1], stddev=1, seed=1))    #3x1矩阵,3行1列

# 定义placeholder作为存放输入数据的地方.这里维度也不一定要定义.但如果维度是确定的,那么给出维度可以降低出错的概率
x = tf.placeholder(tf.float32, shape=(1, 2), name="input")     #1x2矩阵,1行2列
a = tf.matmul(x, w1)
y = tf.matmul(a, w2)

sess = tf.Session()
init_op = tf.global_variables_initializer()  
sess.run(init_op)

print(sess.run(y, feed_dict={x: [[0.7,0.9]]}))  #feed_dict是一个字典,在字典中需要给出每个用到的placeholder的取值

sess.close()
[[3.957578]]

一次性计算多个例子的前向传播结果

import tensorflow as tf
w1= tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1))    #2x3矩阵,2行3列
w2= tf.Variable(tf.random_normal([3, 1], stddev=1, seed=1))    #3x1矩阵,3行1列

# 定义placeholder作为存放输入数据的地方.这里维度也不一定要定义.但如果维度是确定的,那么给出维度可以降低出错的概率
x = tf.placeholder(tf.float32, shape=(3, 2), name="input")     #3x2矩阵,3行2列
a = tf.matmul(x, w1)
y = tf.matmul(a, w2)

sess = tf.Session()
init_op = tf.global_variables_initializer()  
sess.run(init_op)

print(sess.run(y, feed_dict={x: [[0.7,0.9],[0.1,0.4],[0.5,0.8]]}))  #feed_dict是一个字典,在字典中需要给出每个用到的placeholder的取值

sess.close()
[[3.957578 ]
 [1.1537654]
 [3.1674924]]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值