title: How to make sure con1D's output_shape is same as input_shape with time series in keras autoencoder?
body: <h1>Conv1D output shape incorrect in keras autoencoder model when running autoencoder fit.</h1>
  <blockquote>
  <p>I try to use keras autoencoder model to compress and decompress my time-series data. but when I change the layer with <code>Conv1D</code>, the output shape is incorrect.</p>
  <p>I have some time series data with the shape of (4000, 689), where represent 4000 samples and each sample has 689 features. I want to use <code>Conv1D</code> to compress the data but the <code>Upsampling</code> layer's and last <code>Conv1D</code> layer's output shape(?, 688, 1) is not equal to input shape (, 689, 1).</p>
  <p>How should I set those layers' parameters? Thanks in advance.</p>
  </blockquote>
  <pre><code>x_train = data[0:4000].values
  x_test = data[4000:].values
  print('x_train shape:', x_train.shape)
  print('x_test shape:', x_test.shape)
  </code></pre>
  <p>x_train shape: (4000, 689)<br />
  x_test shape: (202, 689)</p>
  <blockquote>
  <p>I reshaped the x_train, x_test to 3dim, like below.</p>
  </blockquote>
  <pre><code>x_tr = x_train.reshape(4000,689,1)
  x_te = x_test.reshape(202,689,1)
  print('x_tr shape:', x_tr.shape)
  print('x_te shape:', x_te.shape)
  </code></pre>
  <p>x_tr shape: (4000, 689, 1)<br />
  x_te shape: (202, 689, 1)</p>
  <pre><code>input_img = Input(shape=(689,1))
  
  x = Conv1D(16, 3, activation='relu', padding='same')(input_img)
  print(x)
  x = MaxPooling1D(2, padding='same')(x)
  print(x)
  x = Conv1D(8, 3, activation='relu', padding='same')(x)
  print(x)
  x = MaxPooling1D(2, padding='same')(x)
  print(x)
  x = Conv1D(8, 3, activation='relu', padding='same')(x)
  print(x)
  encoded = MaxPooling1D(2)(x)
  print(encoded)
  print('--------------')
      
      
  x = Conv1D(8, 3, activation='relu', padding='same')(encoded)
  print(x)
  x = UpSampling1D(2)(x)
  print(x)
  x = Conv1D(8, 3, activation='relu', padding='same')(x)
  print(x)
  x = UpSampling1D(2)(x)
  print(x)
  x = Conv1D(16, 3, activation='relu', padding='same')(x)
  print(x)
  x = UpSampling1D(2)(x)
  print(x)
  decoded = Conv1D(1, 3, activation='sigmoid', padding='same')(x)
  print(decoded)
  
  autoencoder = Model(input_img, decoded)
  autoencoder.compile(optimizer='adam', loss='mse')
  </code></pre>
  <blockquote>
  <p>When I imported those models and run cells above in Jupyter, It seems ok. Maybe. But I get the error in next code when running <code>autoencoder.fit</code>.</p>
  </blockquote>
  <pre><code>autoencoder.fit(x_tr, x_tr, epochs=50, batch_size=128, shuffle=True, validation_data=(x_te, x_te)) 
  </code></pre>
  <p>So I <code>print</code> each layer.</p>
  <blockquote>
  <p>The each layers' <code>print</code> result below.</p>
  </blockquote>
  <pre><code>Tensor(&quot;conv1d_166/Relu:0&quot;, shape=(?, 689, 16), dtype=float32)
  Tensor(&quot;max_pooling1d_71/Squeeze:0&quot;, shape=(?, 345, 16), dtype=float32)
  Tensor(&quot;conv1d_167/Relu:0&quot;, shape=(?, 345, 8), dtype=float32)
  Tensor(&quot;max_pooling1d_72/Squeeze:0&quot;, shape=(?, 173, 8), dtype=float32)
  Tensor(&quot;conv1d_168/Relu:0&quot;, shape=(?, 173, 8), dtype=float32)
  Tensor(&quot;max_pooling1d_73/Squeeze:0&quot;, shape=(?, 86, 8), dtype=float32)
  
  Tensor(&quot;conv1d_169/Relu:0&quot;, shape=(?, 86, 8), dtype=float32)
  Tensor(&quot;up_sampling1d_67/concat:0&quot;, shape=(?, 172, 8), dtype=float32)
  Tensor(&quot;conv1d_170/Relu:0&quot;, shape=(?, 172, 8), dtype=float32)
  Tensor(&quot;up_sampling1d_68/concat:0&quot;, shape=(?, 344, 8), dtype=float32)
  Tensor(&quot;conv1d_171/Relu:0&quot;, shape=(?, 344, 16), dtype=float32)
  Tensor(&quot;up_sampling1d_69/concat:0&quot;, shape=(?, 688, 16), dtype=float32)
  Tensor(&quot;conv1d_172/Sigmoid:0&quot;, shape=(?, 688, 1), dtype=float32) 
  </code></pre>
  <blockquote>
  <p>ValueError bellow:</p>
  </blockquote>
  <pre><code>ValueError                                Traceback (most recent call last)
  &lt;ipython-input-74-56836006a800&gt; in &lt;module&gt;
        3                 batch_size=128,
        4                 shuffle=True,
  ----&gt; 5                 validation_data=(x_te, x_te)
        6                 )
  
  ~/anaconda3/envs/keras/lib/python3.6/site-packages/keras/engine/training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, **kwargs)
      950             sample_weight=sample_weight,
      951             class_weight=class_weight,
  --&gt; 952             batch_size=batch_size)
      953         # Prepare validation data.
      954         do_validation = False
  
  ~/anaconda3/envs/keras/lib/python3.6/site-packages/keras/engine/training.py in _standardize_user_data(self, x, y, sample_weight, class_weight, check_array_lengths, batch_size)
      787                 feed_output_shapes,
      788                 check_batch_axis=False,  # Don't enforce the batch size.
  --&gt; 789                 exception_prefix='target')
      790 
      791             # Generate sample-wise weight values given the `sample_weight` and
  
  ~/anaconda3/envs/keras/lib/python3.6/site-packages/keras/engine/training_utils.py in standardize_input_data(data, names, shapes, check_batch_axis, exception_prefix)
      136                             ': expected ' + names[i] + ' to have shape ' +
      137                             str(shape) + ' but got array with shape ' +
  --&gt; 138                             str(data_shape))
      139     return data
      140 
  
  ValueError: Error when checking target: expected conv1d_172 to have shape (688, 1) but got array with shape (689, 1)
  </code></pre>
  <blockquote>
  <p>Is <code>floor</code> function make this happen?<br />
  How to fix the error and <code>autoencoder.fit</code> correctly?<br />
  Thanks in advance.</p>
  </blockquote>