上一篇文章在创建输入层时使用的是一个常量去定义的 x = tf.constant([[0.7,0.9]]),然而我们在真实训练时输出层的数据时多个的,这样定义显然不行。tensorflow提供了placeholder的机制用于提供数据的输入,placeholder相当于定义了一个位置,这个位置的数据在程序运行时再指定。
import tensorflowas tf
# 定义变量
w1 = tf.Variable(tf.random_normal([2,3],stddev=1),name="w1")
w2 = tf.Variable(tf.random_normal([3,1],stddev=1),name="w2")
biases1 = tf.Variable(tf.zeros([3]),name="b1") # 隐藏层的偏向bias [ 0. 0. 0.]
biases2 = tf.Variable(tf.zeros([1]),name="b1") # 输出层的偏向bias [0.]
# 使用placeholder
x = tf.placeholder(tf.float32,shape=[None,2],name="input") #多个零件时shape=[None,2]
a = tf.matmul(x,w1)+biases1
y = tf.matmul(a,w2)+biases2
那么此时要怎样输入我们的数据呢?我们要做的就是在sess.run()的第二个参数feed_dict传入我们的输入值
with tf.Session()as sess:
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]]}) #表示当输入值为[[0.7,0.9],[0.1,0.4],[0.5,0.8]],打印当前向前神经网络的输出 也可以打印多个值
#print sess.run([a,y],feed_dict={x:[[0.7,0.9]]})
完整代码:
import tensorflowas tf
# 定义变量
w1 = tf.Variable(tf.random_normal([2,3],stddev=1),name="w1")
w2 = tf.Variable(tf.random_normal([3,1],stddev=1),name="w2")
biases1 = tf.Variable(tf.zeros([3]),name="b1") # 隐藏层的偏向bias [ 0. 0. 0.]
biases2 = tf.Variable(tf.zeros([1]),name="b1") # 输出层的偏向bias [0.]
# 使用placeholder
x = tf.placeholder(tf.float32,shape=[None,2],name="input")
a = tf.matmul(x,w1) + biases1
y = tf.matmul(a,w2) + biases2
with tf.Session()as sess:
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]]})
#输出层的结果
[[ 2.15648317]
[ 0.2483343 ]
[ 1.50576186]]