title: tensorflow Dataset API diff between make_initializable_iterator and make_one_shot_iterator
body: <p>I want to know the difference between <code>make_initializable_iterator</code> and <code>make_one_shot_iterator</code>.<br>
  1. Tensorflow documentations said that <code>A "one-shot" iterator does not currently support re-initialization.</code> What exactly does that mean?<br>
  2.  Are the following 2 snippets equivalent?<br>
  Use <code>make_initializable_iterator</code>  </p>
  
  <pre><code>iterator = data_ds.make_initializable_iterator()
  data_iter = iterator.get_next()
  sess = tf.Session()
  sess.run(tf.global_variables_initializer())
  for e in range(1, epoch+1):
      sess.run(iterator.initializer)
      while True:
          try:
              x_train, y_train = sess.run([data_iter])
              _, cost = sess.run([train_op, loss_op], feed_dict={X: x_train,
                                                                 Y: y_train})
          except tf.errors.OutOfRangeError:   
              break
  sess.close()
  </code></pre>
  
  <p>Use <code>make_one_shot_iterator</code>  </p>
  
  <pre><code>iterator = data_ds.make_one_shot_iterator()
  data_iter = iterator.get_next()
  sess = tf.Session()
  sess.run(tf.global_variables_initializer())
  for e in range(1, epoch+1):
      while True:
          try:
              x_train, y_train = sess.run([data_iter])
              _, cost = sess.run([train_op, loss_op], feed_dict={X: x_train,
                                                                 Y: y_train})
          except tf.errors.OutOfRangeError:   
              break
  sess.close()
  </code></pre>