title: Keras Concatenate Layers: Difference between different types of concatenate functions
body: <p>I just recently started playing around with Keras and got into making custom layers. However, I am rather confused by the many different types of layers with slightly different names but with the same functionality. </p>
  
  <p>For example, there are 3 different forms of the concatenate function from <a href="https://keras.io/layers/merge/" rel="noreferrer">https://keras.io/layers/merge/</a> and <a href="https://www.tensorflow.org/api_docs/python/tf/keras/backend/concatenate" rel="noreferrer">https://www.tensorflow.org/api_docs/python/tf/keras/backend/concatenate</a></p>
  
  <pre><code>keras.layers.Concatenate(axis=-1)
  keras.layers.concatenate(inputs, axis=-1)
  tf.keras.backend.concatenate()
  </code></pre>
  
  <p>I know the 2nd one is used for functional API but what is the difference between the 3? The documentation seems a bit unclear on this.</p>
  
  <p>Also, for the 3rd one, I have seen a code that does this below. Why must there be the line ._keras_shape after the concatenation?</p>
  
  <pre><code># Concatenate the summed atom and bond features
  atoms_bonds_features = K.concatenate([atoms, summed_bond_features], axis=-1)
  
  # Compute fingerprint
  atoms_bonds_features._keras_shape = (None, max_atoms, num_atom_features + num_bond_features)
  </code></pre>
  
  <p>Lastly, under keras.layers, there always seems to be 2 duplicates. For example, Add() and add(), and so on.</p>