title: Keras NASNet training
body: <p>I intend to:</p>
  
  <ol>
  <li>Train NASNet from scratch on a dataset</li>
  <li>Re-train only the last layer of NASNet (transfer learning)</li>
  </ol>
  
  <p>and compare their relative performance. From the documentation i see:</p>
  
  <p><code>keras.applications.nasnet.NASNetLarge(input_shape=None, include_top=True, weights='imagenet', input_tensor=None, pooling=None, classes=1000)</code></p>
  
  <p>However the documentation is confusing be a bit.</p>
  
  <p>Questions:</p>
  
  <ol>
  <li><p>For transfer learning, do I set <code>include_top = True</code> and <code>classes = (num_classes)</code>, freeze all the layers except the last one, then train that?</p></li>
  <li><p>Is it a requirement to have input images in the same shape as specified? NASNet requires (331,331,3) but that is quite large and i see imagenet being trained with diff sizes. Can I use smaller images such as (120,120,3) and replace the top layer? This would still be considered transfer learning right? However, the NASNet last layer seems to be a special type of cell, how would I implement that?</p></li>
  <li><p>If I want to train from scratch, can I confirm that i set <code>include_top = False</code>, and add fully connected layers to the end?</p></li>
  </ol>
  
  <p>Ideally if there's a tutorial that shows how to train NASNet from scratch as well as via transfer learning on a new dataset that'd be great. I found one for imagenet, but he built the model layers himself instead of using <code>keras.applications</code>.</p>