title: Pre-training Keras Xception and InceptionV3 models
body: <p>I'm trying to do a simple binary classification problem using Keras and its pre-built ImageNet CNN architecture.</p>
  <p>For VGG16, I took the following approach,</p>
  <pre><code>vgg16_model = keras.application.vgg16.VGG16()
  
  '''Rebuild the vgg16 using an empty sequential model'''
  model = Sequential()
  for layer in vgg16_model.layers:
      model.add(layer)
  
  '''Since the problem is binary, I got rid of the output layer and added a more appropriate output layer.'''
  model.pop()
  
  '''Freeze other pre-trained weights'''
  for layer in model.layers:
      layer.trainable = False
  
  '''Add the modified final layer'''
  model.add(Dense(2, activation = 'softmax'))
  </code></pre>
  <p>And this worked marvelously with higher accuracy than my custom built CNN. But it took a while to train and I wanted to take a similar approach using Xception and InceptionV3 since they were lighter models with higher accuracy.</p>
  <pre><code>xception_model = keras.applicaitons.xception.Xception()
  model = Sequential()
  for layer in xception_model.layers:
      model_xception.add(layer)
  </code></pre>
  <p>When I run the above code, I get the following error:</p>
  <pre><code>ValueError: Input 0 is incompatible with layer conv2d_193: expected axis -1 of input shape to have value 64 but got shape (None, None, None, 128)
  </code></pre>
  <p>Basically, I would like to do the same thing as I did with VGG16 model; keep the other pretrained weights as they are and simply modify the output layer to a binary classification output instead of an output layer with 1000 outcomes. I can see that unlike VGG16, which has relatively straightforward convolution layer structure, Xception and InceptionV3 have some funky nodes that I'm not 100% familiar with and I'm assuming those are causing issues.</p>