函数原型:
tf.placeholder(dtype, shape=None, name=None)
参数释义:1.dtype:数据类型。常用的是tf.float32,tf.float64等数值类型
2.shape:数据形状。默认是None,就是一维值,也可以是多维(比如[2,3], [None, 3]表示列是3,行不定)
3.name:名称
在编写程序时,首先构筑整个系统的graph,此时图中的节点是未经初始化的,代码并未生效,这一点和python的其他数值计算库(如Numpy等)不同,graph为静态的。在实际的运行时,启动一个session,程序才会真正的运行。placeholder()函数是在神经网络构建graph的时候在模型中的占位,此时并没有把要输入的数据传入模型,它只会分配必要的内存。等建立session,在会话中,运行模型的时候通过feed_dict()函数向占位符输入数据。通常用来获取模型的输入数据。
两种用法:1.用来获取模型的输入数据
import tensorflow as tf
import numpy as np
input1 = tf.placeholder(tf.float32, [], name='input1') #为输入数据input1定义占位符
input2 = tf.placeholder(tf.float32, [], name='input2') #为input2定义占位符
output = tf.multiply(input1, input2)
with tf.Session() as sess:
data_dict = {input1:[3.], input2: [4.]}
print(sess.run(output, feed_dict=data_dict)) #通过sess.run中的feed_dict赋值
这里更复杂的我们可以把input1,理解为输入的训练数据;input2,理解为输入的训练数据的标签
2.用来定义某些常量
import tensorflow as tf
import os
batch_size = tf.Variable(
tf.placeholder(tf.int64, [], 'batch_size_1'),
trainable=False, collections=[], name='batch_size'
)
init = tf.variables_initializer([batch_size])
print(batch_size.name)
data_dict = {'batch_size_1:0' : 8} #注意这里要为占位符数据的名称,由于这里的占位符是定义在tf.Variable()里的,因此,二者的命名前缀一致,只需改实际名称即可,注意要在末尾加 ":0"
sess = tf.Session()
print(sess.run(init, feed_dict=data_dict)) #在初始化变量时为占位符赋值
print(sess.run(batch_size))
由此,我们可见,为tf.placeholder()数据赋值时,总是依赖某一个函数的运行的