title: TensorFlow 2.0 dataset.__iter__() is only supported when eager execution is enabled
body: <p>I'm using the following custom training code in TensorFlow 2:</p>
  
  <pre><code>def parse_function(filename, filename2):
      image = read_image(fn)
      def ret1(): return image, read_image(fn2), 0
      def ret2(): return image, preprocess(image), 1
      return tf.case({tf.less(tf.random.uniform([1])[0], tf.constant(0.5)): ret2}, default=ret1)
  
  dataset = tf.data.Dataset.from_tensor_slices((train,shuffled_train))
  dataset = dataset.shuffle(len(train))
  dataset = dataset.map(parse_function, num_parallel_calls=4)
  dataset = dataset.batch(1)
  dataset = dataset.prefetch(buffer_size=4)
  
  @tf.function
  def train(model, dataset, optimizer):
      for x1, x2, y in enumerate(dataset):
          with tf.GradientTape() as tape:
              left, right = model([x1, x2])
              loss = contrastive_loss(left, right, tf.cast(y, tf.float32))
          gradients = tape.gradient(loss, model.trainable_variables)
          optimizer.apply_gradients(zip(gradients, model.trainable_variables))
  
  siamese_net.compile(optimizer=tf.keras.optimizers.RMSprop(learning_rate=1e-3))
  train(siamese_net, dataset, tf.keras.optimizers.RMSprop(learning_rate=1e-3))
  </code></pre>
  
  <p>This code gives me the error:</p>
  
  <pre><code>dataset.__iter__() is only supported when eager execution is enabled.
  </code></pre>
  
  <p>However, it's in TensorFlow 2.0 so eager is enabled by default.
  <code>tf.executing_eagerly()</code> also returns 'True'.</p>