text: from keras.preprocessing.image import ImageDataGenerator
  from keras.models import Sequential
  from keras.layers import Convolution2D, MaxPooling2D
  from keras.layers import Activation, Dropout, Flatten, Dense
  from keras.layers.normalization import BatchNormalization
  
  
  # dimensions of our images.
  img_width, img_height = 256, 256
  
  train_data_dir = 'data/split_0/train'
  validation_data_dir = 'data/split_0/val'
  nb_train_samples = 500 #2500
  nb_validation_samples = 500
  nb_epoch = 5
  
  
  model = Sequential()
  model.add(Convolution2D(32, 3, 3, input_shape=(3, img_width, img_height)))
  model.add(BatchNormalization())
  model.add(Activation('relu'))
  model.add(MaxPooling2D(pool_size=(2, 2)))
  
  model.add(Convolution2D(32, 3, 3))
  model.add(BatchNormalization())
  model.add(Activation('relu'))
  model.add(MaxPooling2D(pool_size=(2, 2)))
  
  model.add(Convolution2D(64, 3, 3))
  model.add(BatchNormalization())
  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,
          vertical_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=32,
          class_mode='binary')
  
  validation_generator = test_datagen.flow_from_directory(
          validation_data_dir,
          target_size=(img_width, img_height),
          batch_size=32,
          class_mode='binary')
  
  model.fit_generator(
          train_generator,
          samples_per_epoch=nb_train_samples,
          nb_epoch=nb_epoch,
          validation_data=validation_generator,
          nb_val_samples=nb_validation_samples,
          verbose=True)
  
  model.save_weights('first_try.h5')
  