Placeholders allow you to feed values into a tensorflow graph. Aditionally They allow you to specify constraints regarding the dimensions and data type of the values being fed in. As such they are useful when creating a neural network to feed new training examples.
The following example declares a placeholder for a 3 by 4 tensor with elements that are (or can be typecasted to) 32 bit floats.
a = tf.placeholder(tf.float32, shape=[3,4], name='a')
Placeholders will not contain any values on their own, so it is important to feed them with values when running a session otherwise you will get an error message. This can be done using the feed_dict argument when calling session.run(), eg:
# run the graph up to node b, feeding the placeholder `a` with values in my_array
session.run(b, feed_dict={a: my_array})
Here is a simple example showing the entire process of declaring and feeding a placeholer.
import tensorflow as tf
import numpy as np
# Build a graph
graph = tf.Graph()
with graph.as_default():
# declare a placeholder that is 3 by 4 of type float32
a = tf.placeholder(tf.float32, shape=(3, 4), name='a')
# Perform some operation on the placeholder
b = a * 2
# Create an array to be fed to `a`
input_array = np.ones((3,4))
# Create a session, and run the graph
with tf.Session(graph=graph) as session:
# run the session up to node b, feeding an array of values into a
output = session.run(b, feed_dict={a: input_array})
print(output)
The placeholder takes a 3 by 4 array of ones, and that tensor is then multiplied by 2 at node b, wich then returns and prints out the following:
[[ 2. 2. 2. 2.]
[ 2. 2. 2. 2.]
[ 2. 2. 2. 2.]]