- placeholder —占位符
参考莫烦PYTHON视频P12
placeholder, 译为占位符,官方说法:”TensorFlow provides a placeholder operation that must be fed with data on execution.” 即必须在执行时feed值。
placeholder 实例通常用来为算法的实际输入值作占位符。
例如
Tensorflow 如果想要从外部传入data, 那就需要用到 tf.placeholder(), 然后以这种形式传输数据 sess.run(***, feed_dict={input: **}).
示例:
import tensorflow as tf
#在 Tensorflow 中需要定义 placeholder 的 type ,一般为 float32 形式
input1 = tf.placeholder(tf.float32)
input2 = tf.placeholder(tf.float32)
#mul=multiply是将input1和input2做乘法运算,并输出为output
ouput = tf.multiply(input1, input2)
接下来, 传值的工作交给了 sess.run() , 需要传入的值放在了feed_dict={} (这在python中相当于一本字典)并一一对应每一个 input. placeholder 与 feed_dict={} 是绑定在一起出现的。
with tf.Session() as sess:
print(sess.run(ouput, feed_dict={input1: [7.], input2: [2.]}))
输出
#[14.]
- variable —变量
参考:莫烦PYTHON视频P11
在 Tensorflow 中,定义了某字符串是变量,它才是变量,这一点是与 Python 所不同的。
定义语法: state = tf.Variable()
import tensorflow as tf
state = tf.Variable(0, name='counter')
#定义常量one
one = tf.constant(1)
#定义加法步骤(注:此步并没有直接计算)
new_value = tf.add(state, one)
#将state更新为new_value
update = tf.assign(state, new_value)
如果你在 Tensorflow 中设定了变量,那么初始化变量是最重要的!!所以定义了变量以后, 一定要定义
init = tf.initialize_all_variables() .
到这里变量还是没有被激活,需要再在 sess 里,
sess.run(init)
激活 init 这一步.
#如果定义variable,就一定要initialize
#init = tf.initialize_all_variables() # tf 马上就要废弃这种写法
init = tf.global_variables_initializer() # 替换成这样就好
#使用session
with tf.Session() as sess:
sess.run(init)
for _ in range(3):
sess.run(update)
print(sess.run(state))
注意:直接 print(state) 不起作用!!
一定要把 sess 的指针指向 state 再进行 print 才能得到想要的结果!