title: What is the difference between SeparableConv2D and Conv2D layers?
body: <p>I didn't find a clearly answer to this question online (sorry if it exists).
  I would like to understand the differences between the two functions (<em>SeparableConv2D</em> and <em>Conv2D</em>), step by step with, for example a input dataset of <em>(3,3,3)</em> (as RGB image).</p>
  
  <p>Running this script based on Keras-Tensorflow :</p>
  
  <pre><code>import numpy as np
  from keras.layers import Conv2D, SeparableConv2D
  from keras.models import Model
  from keras.layers import Input
  
  red   = np.array([1]*9).reshape((3,3))
  green = np.array([100]*9).reshape((3,3))
  blue  = np.array([10000]*9).reshape((3,3))
  
  img = np.stack([red, green, blue], axis=-1)
  img = np.expand_dims(img, axis=0)
  
  inputs = Input((3,3,3))
  conv1 = SeparableConv2D(filters=1, 
                strides=1, 
                padding='valid', 
                activation='relu',
                kernel_size=2, 
                depth_multiplier=1,
                depthwise_initializer='ones',
                pointwise_initializer='ones',
                bias_initializer='zeros')(inputs)
  
  conv2 = Conv2D(filters=1, 
                strides=1, 
                padding='valid', 
                activation='relu',
                kernel_size=2, 
                kernel_initializer='ones', 
                bias_initializer='zeros')(inputs)
  
  model1 = Model(inputs,conv1)
  model2 = Model(inputs,conv2)
  print("Model 1 prediction: ")
  print(model1.predict(img))
  print("Model 2 prediction: ")
  print(model2.predict(img))
  print("Model 1 summary: ")
  model1.summary()
  print("Model 2 summary: ")
  model2.summary()
  </code></pre>
  
  <p>I have the following output : </p>
  
  <pre><code>Model 1 prediction:
   [[[[40404.]
     [40404.]]
    [[40404.]
     [40404.]]]]
  Model 2 prediction: 
  [[[[40404.]
     [40404.]]
    [[40404.]
     [40404.]]]]
  Model 1 summary: 
  _________________________________________________________________
  Layer (type)                 Output Shape              Param #   
  =================================================================
  input_1 (InputLayer)         (None, 3, 3, 3)           0         
  _________________________________________________________________
  separable_conv2d_1 (Separabl (None, 2, 2, 1)           16        
  =================================================================
  Total params: 16
  Trainable params: 16
  Non-trainable params: 0
  _________________________________________________________________
  Model 2 summary: 
  _________________________________________________________________
  Layer (type)                 Output Shape              Param #   
  =================================================================
  input_1 (InputLayer)         (None, 3, 3, 3)           0         
  _________________________________________________________________
  conv2d_1 (Conv2D)            (None, 2, 2, 1)           13        
  =================================================================
  Total params: 13
  Trainable params: 13
  Non-trainable params: 0
  </code></pre>
  
  <p>I understand how Keras compute the <em>Conv2D</em> prediction of model 2 thanks to <a href="https://stackoverflow.com/questions/43306323/keras-conv2d-and-input-channels">this post</a>, but can someone explains the <em>SeperableConv2D</em> computation of model 1 prediction please and its number of parameters (16) ?  </p>