title: How to check what features are extracted while training and testing a CNN model for image classification?
body: <p>I'm using CNN for training and testing images of seeds. I want to know:</p>
  
  <ul>
  <li>What features are getting extracted at every layer?</li>
  <li>Is there any way to represent it in a graphical or image format?</li>
  <li><p>How do I define my classifier to extract only specific features?</p>
  
  <pre><code>from keras.preprocessing.image import ImageDataGenerator
  from keras.models import Sequential
  from keras.layers import Conv2D, MaxPooling2D
  from keras.layers import Activation, Dropout, Flatten, Dense
  from keras import backend as K
  
  
  # dimensions of our images.
  img_width, img_height = 150, 150
  
  train_data_dir = 'Train_Walnut_Seed/train'
  validation_data_dir = 'Train_Walnut_Seed/validation'
  nb_train_samples = 70
  nb_validation_samples = 9
  epochs = 50
  batch_size = 16
  
  if K.image_data_format() == 'channels_first':
          input_shape = (3, img_width, img_height)
  else:
          input_shape = (img_width, img_height, 3)
  
  model = Sequential()
  model.add(Conv2D(32, (3, 3), input_shape=input_shape))
  model.add(Activation('relu'))
  model.add(MaxPooling2D(pool_size=(2, 2)))
  
  model.add(Conv2D(32, (3, 3)))
  model.add(Activation('relu'))
  model.add(MaxPooling2D(pool_size=(2, 2)))
  
  model.add(Conv2D(64, (3, 3)))
  model.add(Activation('relu'))
  model.add(MaxPooling2D(pool_size=(2, 2)))
  
  model.add(Flatten())
  model.add(Dense(64))
  model.add(Activation('relu'))
  model.add(Dropout(0.5))
  model.add(Dense(1))
  model.add(Activation('sigmoid'))
  
  model.compile(loss='binary_crossentropy',
          optimizer='rmsprop',
          metrics=['accuracy'])
  
  # this is the augmentation configuration we will use for training
  train_datagen = ImageDataGenerator(
          rescale=1. / 255,
          shear_range=0.2,
          zoom_range=0.2,
          horizontal_flip=True)
  
  # this is the augmentation configuration we will use for testing:
  # only rescaling
  test_datagen = ImageDataGenerator(rescale=1. / 255)
  
  train_generator = train_datagen.flow_from_directory(
  train_data_dir,
  target_size=(img_width, img_height),
  batch_size=batch_size,
  class_mode='binary')
  
  validation_generator = test_datagen.flow_from_directory(
          validation_data_dir,
          target_size=(img_width, img_height),
          batch_size=batch_size,
          class_mode='binary')
  
  model.fit_generator(
          train_generator,
          steps_per_epoch=nb_train_samples // batch_size,
          epochs=epochs,
          validation_data=validation_generator,
          validation_steps=nb_validation_samples // batch_size)
  
  model.save('first_try_walnut.h5')
  </code></pre></li>
  </ul>
  
  <p>The above code is for training the classifier using CNN. how to visually represent the output at each layer while training.
  Also how to deploy my trained model into a protocolbuffer(.pb) file for using it in my android project </p>