Commit 71c4ec8e authored by Derek Murray's avatar Derek Murray Committed by TensorFlower Gardener
Browse files

Add a mechanism for switching between multiple iterators by feeding a handle.

With this change, you can do the following:

1. Fetch a string handle for any iterator, by evaluating the result of
   `Iterator.string_handle()`.
2. Define an `Iterator` object based on a `tf.string` placeholder handle.
3. Feed the placeholder using an evaluated string handle to use a particular
   iterator in a particular step.

Concretely, this allows you to define two iterators for a training dataset and
a test dataset, and choose which one to use on a per-run basis:

```python
train_iterator = tf.contrib.data.Dataset(...).make_one_shot_iterator()
train_iterator_handle = sess.run(train_iterator.string_handle())

test_iterator = tf.contrib.data.Dataset(...).make_one_shot_iterator()
test_iterator_handle = sess.run(test_iterator.string_handle())

handle = tf.placeholder(tf.string, shape=[])
iterator = tf.contrib.data.Iterator.from_string_handle(
    handle, train_iterator.output_types)

next_element = iterator.get_next()
loss = f(next_element)

train_loss = sess.run(loss, feed_dict={handle: train_iterator_handle})
test_loss = sess.run(loss, feed_dict={handle: test_iterator_handle})
```
PiperOrigin-RevId: 161719836
parent 6d6dda80
Loading
Loading
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment