title: Tensorflow: What does tf.nn.separable_conv2d do?
body: <p>I'm not quite sure what tf.nn.separable_conv2d does exactly. It seems to be that the pointwise_filter is the scaling factor for different features when generating one pixel of the next layer. But I'm not sure whether my interpretation is correct. Is there any reference for this method and what's the benefit? </p>
  
  <p>tf.nn.separable_conv2d generates the same shape as tf.nn.conv2d. I would assume I can replace tf.nn.conv2d with tf.nn.separable_conv2d. But the result when using tf.nn.separable_conv2d seems to be very bad. The network stopped learning very early. For MNIST dataset, the accuracy is just random guess ~ 10%.</p>
  
  <p>I thought when I set the pointwise_filter values to be all 1.0 and make it not trainable, I would get the same thing as the tf.nn.conv2d. But not really... still ~10% accuracy.</p>
  
  <p>But when tf.nn.conv2d is used with the same hyper-parameters, the accuracy can be 99%. Why?</p>
  
  <p>Also, it requires channel_multiplier * in_channels &lt; out_channels. Why? What is the role of channel_multiplier here?</p>
  
  <p>Thanks. </p>
  
  <p>Edit: </p>
  
  <p>I used channel_multiplier previously as 1.0. Maybe that is a bad choice. After I change it to 2.0, the accuracy becomes much better. But what is the role of channel_multiplier? Why 1.0 is not a good value?</p>