title: Tensorflow keras with tf dataset input
body: <p>I'm new to tensorflow keras and dataset. Can anyone help me understand why the following code doesn't work?</p>
  
  <pre><code>import tensorflow as tf
  import tensorflow.keras as keras
  import numpy as np
  from tensorflow.python.data.ops import dataset_ops
  from tensorflow.python.data.ops import iterator_ops
  from tensorflow.python.keras.utils import multi_gpu_model
  from tensorflow.python.keras import backend as K
  
  
  data = np.random.random((1000,32))
  labels = np.random.random((1000,10))
  dataset = tf.data.Dataset.from_tensor_slices((data,labels))
  print( dataset)
  print( dataset.output_types)
  print( dataset.output_shapes)
  dataset.batch(10)
  dataset.repeat(100)
  
  inputs = keras.Input(shape=(32,))  # Returns a placeholder tensor
  
  # A layer instance is callable on a tensor, and returns a tensor.
  x = keras.layers.Dense(64, activation='relu')(inputs)
  x = keras.layers.Dense(64, activation='relu')(x)
  predictions = keras.layers.Dense(10, activation='softmax')(x)
  
  # Instantiate the model given inputs and outputs.
  model = keras.Model(inputs=inputs, outputs=predictions)
  
  # The compile step specifies the training configuration.
  model.compile(optimizer=tf.train.RMSPropOptimizer(0.001),
            loss='categorical_crossentropy',
            metrics=['accuracy'])
  
  # Trains for 5 epochs
  model.fit(dataset, epochs=5, steps_per_epoch=100)
  </code></pre>
  
  <p>It failed with the following error:</p>
  
  <pre><code>model.fit(x=dataset, y=None, epochs=5, steps_per_epoch=100)
  File "/home/wuxinyu/pyEnv/lib/python3.5/site-packages/tensorflow/python/keras/engine/training.py", line 1510, in fit
  validation_split=validation_split)
  File "/home/wuxinyu/pyEnv/lib/python3.5/site-packages/tensorflow/python/keras/engine/training.py", line 994, in _standardize_user_data
  class_weight, batch_size)
  File "/home/wuxinyu/pyEnv/lib/python3.5/site-packages/tensorflow/python/keras/engine/training.py", line 1113, in _standardize_weights
  exception_prefix='input')
  File "/home/wuxinyu/pyEnv/lib/python3.5/site-packages/tensorflow/python/keras/engine/training_utils.py", line 325, in standardize_input_data
  'with shape ' + str(data_shape))
  ValueError: Error when checking input: expected input_1 to have 2 dimensions, but got array with shape (32,)
  </code></pre>
  
  <p>According to tf.keras guide, I should be able to directly pass the dataset to model.fit, as this example shows:</p>
  
  <blockquote>
    <h1>Input tf.data datasets</h1>
    
    <p>Use the Datasets API to scale to large datasets or multi-device training. Pass a tf.data.Dataset instance to the fit method:</p>
  </blockquote>
  
  <pre><code># Instantiates a toy dataset instance:
  dataset = tf.data.Dataset.from_tensor_slices((data, labels))
  dataset = dataset.batch(32)
  dataset = dataset.repeat()
  </code></pre>
  
  <blockquote>
    <h1>Don't forget to specify <code>steps_per_epoch</code> when calling <code>fit</code> on a dataset.</h1>
    
    <p>model.fit(dataset, epochs=10, steps_per_epoch=30)
    Here, the fit method uses the steps_per_epoch argument—this is the number of training steps the model runs before it moves to the next epoch. Since the Dataset yields batches of data, this snippet does not require a batch_size.</p>
    
    <p>Datasets can also be used for validation:</p>
  </blockquote>
  
  <pre><code>dataset = tf.data.Dataset.from_tensor_slices((data, labels))
  dataset = dataset.batch(32).repeat()
  
  val_dataset = tf.data.Dataset.from_tensor_slices((val_data, val_labels))
  val_dataset = val_dataset.batch(32).repeat()
  
  model.fit(dataset, epochs=10, steps_per_epoch=30,
        validation_data=val_dataset,
        validation_steps=3)
  </code></pre>
  
  <p>What's the problem with my code, and what's the correct way of doing it?</p>