Tensorflow中的palceholder,中文翻译为占位符 

     在代码层面,每一个tensor值在graph上都是一个op,当我们将train数据分成一个个minibatch然后传入网络进行训练时,每一个minibatch都将是一个op,这样的话,一副graph上的op未免太多,也会产生巨大的开销;于是就有了tf.placeholder(),我们每次可以将 一个minibatch传入到x = tf.placeholder(tf.float32,[None,32])上,下一次传入的x都替换掉上一次传入的x,这样就对于所有传入的minibatch x就只会产生一个op,不会产生其他多余的op,进而减少了graph的开销。

函数形式:

tf.placeholder(
    dtype,
    shape=None,
    name=None
)

函数参数

  • dtype:数据类型。常用的是tf.float32,tf.float64等数值类型
  • shape:数据形状。默认是None,就是一维值,也可以是多维(比如[2,3], [None, 3]表示列是3,行不定)
  • name:名称

返回

  Tensor类型。

代码示例1:

import tensorflow as tf
import numpy as np
 
a = tf.placeholder(tf.float32)
b = tf.placeholder(tf.float32)
 
output = tf.multiply(a, b)
 
with tf.Session() as sess:
    print(sess.run(output, feed_dict = {a:[3.], b: [4.]}))

代码示例2: 

 
import tensorflow as tf
import numpy as np
 
x = tf.placeholder(tf.float32, shape=(1024, 1024))
y = tf.matmul(x, x)
 
with tf.Session() as sess:
    #print(sess.run(y))  # ERROR:此处x还没有赋值
    rand_array = np.random.rand(1024, 1024)
    print(sess.run(y, feed_dict={x: rand_array})) 

代码示例3:

其实feed_dict可以喂东西给其他tensor,不止placeholder这一种。

import tensorflow as tf

a = tf.placeholder(dtype=tf.float32)
b = tf.constant(2.0)
c = tf.add(a, b)

with tf.Session() as sess:
    print sess.run(c, feed_dict = {a: 1.0, b: 3.0})  #结果为4.0

运行的结果为4,这里利用feed_dict将3.0送给了tensor b

参考资料:https://www.jianshu.com/p/ec261a65e3c9

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐