title: Keras SeparableConv2D simple example?
body: <p>I've read a lot of good stuff about Separable Convolution it and I'm trying to put it into practice.</p>
  
  <p>I picked up dataset 64x64 pics with 11599 train and 2891 for test with 200 labels.</p>
  
  <pre><code>i = inp
  
  i = Conv2D(filters = 64, kernel_size = 4)(i)
  i = BatchNormalization()(i)
  i = LeakyReLU()(i)
  i = MaxPooling2D(2)(i)    
  i = Conv2D(filters = 64, kernel_size = 4)(i)    
  i = BatchNormalization()(i)
  i = LeakyReLU()(i)
  i = MaxPooling2D(2)(i)    
  i = Conv2D(filters = 64, kernel_size = 4)(i)
  i = BatchNormalization()(i)
  i = LeakyReLU()(i)
  i = MaxPooling2D(2)(i)
  i = Conv2D(filters = 64, kernel_size = 4)(i)
  i = BatchNormalization()(i)
  i = LeakyReLU()(i)
  
  i = GlobalMaxPooling2D()(i)
  
  i = Dense(len(labels), activation = 'softmax')(i)
  </code></pre>
  
  <p>this model gave me 0.75 test and 0.89 train accuracy</p>
  
  <p>Then I decided to try Separable Convolution but I couldn't find simple examples. In Keras repository it used in xception, but it's too difficult for me.</p>
  
  <pre><code>i = inp
  
  i = Conv2D(filters = 32, kernel_size = 4)(i)
  i = BatchNormalization()(i)
  i = LeakyReLU()(i)
  i = MaxPooling2D(2)(i)
  
  i = Conv2D(filters = 32, kernel_size = 4)(i)    
  i = BatchNormalization()(i)
  i = LeakyReLU()(i)
  i = MaxPooling2D(2)(i)
  
  i = SeparableConv2D(filters = 128, kernel_size = 4, strides = 1)(i)
  i = BatchNormalization()(i)
  i = LeakyReLU()(i)
  i = SeparableConv2D(filters = 128, kernel_size = 4, strides = 1)(i)
  i = BatchNormalization()(i)
  i = LeakyReLU()(i)
  
  i = GlobalMaxPooling2D()(i)
  
  i = Dense(len(labels), activation = 'softmax')(i)
  
  m = Model(inp, i)
  </code></pre>
  
  <p>With this model, I achieved about the same results.
  I think im doing wrong something.</p>