【TensorFlow】理解tf.placeholder方法

在tf里,placeholder方法可以说是最常见,用的最多的一个api了,这里就介绍一下这个api的具体使用情况。

通常placeholder的作用理解为是占位符,不过占位符这个概念似乎有些抽象,字面意思其实就是它的作用 — 占个位置,那啥东西是占个位置啊,大家只要写过函数就知道,形参就是占位置嘛。就像java或者C++里定义一个函数,会有形参,用来代替实际参数,在实际调用该方法的时候传入实参。

注意:占位符并没有初始值,它只会分配必要的内存

1、基本信息

先看一下方法的基本定义:

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

输入参数共有三个:dtype,shape,name

  • dtype:表示输入的张量数据类型,常用的有float32,int32,float64等
  • shape:表示输入的张量大小,默认是None,也可以表示多维,如 (2, 3) 表示2行3列,(None, 4) 表示4列但行数不确定,这种写法非常常见
  • name:表示输入张量的名称

2、样例

看一下官网给的demo

x = tf.placeholder(tf.float32, shape=(1024, 1024))
y = tf.matmul(x, x)

with tf.Session() as sess:
  print(sess.run(y))  # ERROR: will fail because x was not fed.

  rand_array = np.random.rand(1024, 1024)
  print(sess.run(y, feed_dict={x: rand_array}))  # Will succeed.

解释一下上面的样例,首先定义了一个占位符 x,传入的张量数据类型是float32,大小是1024*1024,然后定义了一个张量运算,x * x,将结果返回给 y,就这么简单。
我们可以看到,第5行代码打印了 y 的运行结果,但是这样的写法是不对的,因为这个时候,x是没有被赋值初始化的,会报错。
必须按照第7,8两行的写法,先初始化一个对应 x 大小的张量,再把这个初始化张量通过 feed_dict 赋值给 x,在计算 y 的时候 x 就是已经初始化了

注意:feed_dict是一个字典,在字典中需要给出每一个用到的占位符的取值

demo 1

x = tf.placeholder(tf.float32, shape=(2, 2))
y = tf.matmul(x, x)

with tf.Session() as sess:
  rand_array = np.random.rand(2, 2)
  print(rand_array)
  print(sess.run(y, feed_dict={x: rand_array}))  # Will succeed.

" 运行结果:"
# rand_array
[[0.08920081 0.76900946]
 [0.45190084 0.96919868]]
# y
[[0.3554728  0.81391925]
 [0.47829163 1.2868621 ]]

demo 2

# 定义两个占位符,在feed_dict里就要传入两个占位符的取值
x1 = tf.placeholder(tf.float32, shape=(2, 3))
x2 = tf.placeholder(tf.float32, shape=(3, 2))

y = tf.matmul(x1, x2)

with tf.Session() as sess:
  ra1 = np.random.rand(2, 3)
  ra2 = np.random.rand(3, 2)
  print('ra1: ', ra1)
  print('ra2: ', ra2)
  print('y: ', sess.run(y, feed_dict={x1: ra1, x2: ra2}))  # Will succeed.

'运行结果:'
ra1:  [[0.29002803 0.79811589 0.14638663]
 [0.78678378 0.98518073 0.15522269]]
ra2:  [[0.39635025 0.65686898]
 [0.61683618 0.48875637]
 [0.20795447 0.93733294]]
y:  [[0.6377012  0.71780765]
 [0.9518163  1.1438226 ]]

猜你喜欢

转载自blog.csdn.net/zuolixiangfisher/article/details/89500624