In [1]:
# Building the CNN

from keras.models import Sequential
from keras.layers import Convolution2D
from keras.layers import MaxPooling2D
from keras.layers import Flatten
from keras.layers import Dense
from keras.models import load_model
from keras.callbacks import EarlyStopping
# Initializing the CNN
classifier = Sequential()

# Step 1 - Convolution
classifier.add(Convolution2D(12, 3, 3, input_shape = (64, 64, 3),activation = 'relu'))


# Step 2 - Max Pooling
classifier.add(MaxPooling2D(pool_size = (2,2)))

# Adding a second convolution layer
classifier.add(Convolution2D(5120, 3, 3, activation = 'relu'))
classifier.add(MaxPooling2D(pool_size = (2,2)))

# Adding a third convolution layer
classifier.add(Convolution2D(512, 3, 3, activation = 'relu'))
classifier.add(MaxPooling2D(pool_size = (2,2)))

# Adding a 4th convolution layer
classifier.add(Convolution2D(256, 3, 3, activation = 'relu'))
classifier.add(MaxPooling2D(pool_size = (2,2)))

# Adding a 5th convolution layer
#classifier.add(Convolution2D(64, 3, 3, activation = 'relu'))
#classifier.add(MaxPooling2D(pool_size = (2,2)))

# Adding a 6th convolution layer
#classifier.add(Convolution2D(256, 3, 3, activation = 'relu'))
#classifier.add(MaxPooling2D(pool_size = (2,2)))

# Adding a 5th convolution layer
#classifier.add(Convolution2D(512, 3, 3, activation = 'relu'))
#classifier.add(MaxPooling2D(pool_size = (2,2)))

# Step 3 - Flattening
classifier.add(Flatten())


# Step 4 - Full Connection
classifier.add(Dense(output_dim = 128, activation= 'relu'))
classifier.add(Dense(output_dim = 5,activation= 'softmax'))


# Compiling the CNN
classifier.compile(optimizer = 'rmsprop', loss = 'categorical_crossentropy', metrics = ['accuracy'])

# Part 2 - Fitting the CNN to the image
from keras.preprocessing.image import ImageDataGenerator

train_datagen = ImageDataGenerator(
        rescale=1./255,
        shear_range=0.2,
        zoom_range=0.2,
        horizontal_flip=True)

test_datagen = ImageDataGenerator(rescale=1./255)

train_generator = train_datagen.flow_from_directory(
        '/darrenDemo3/TrainingData',
        target_size=(64, 64),
        batch_size=10,
        class_mode='categorical')

validation_generator = test_datagen.flow_from_directory(
        '/darrenDemo3/ValidationData',
        target_size=(64, 64),
        batch_size=2,
        class_mode='categorical')
early_stopping = EarlyStopping(monitor='val_acc', patience=5, verbose=1, mode='max')
from keras.callbacks import TensorBoard
tbCallBack = TensorBoard(log_dir='/darrenDemo3/tb', histogram_freq=2,  
          write_graph=True, write_images=True)

classifier.fit_generator(
        train_generator,
        samples_per_epoch=2000,     
        epochs=50,
        validation_data=validation_generator,
        callbacks=[early_stopping, tbCallBack],
        validation_steps=800)
classifier.save('/darrenDemo3/Q09-model.h5')


Using TensorFlow backend.
C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:14: UserWarning: Update your `Conv2D` call to the Keras 2 API: `Conv2D(12, (3, 3), input_shape=(64, 64, 3..., activation="relu")`
  
C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:21: UserWarning: Update your `Conv2D` call to the Keras 2 API: `Conv2D(5120, (3, 3), activation="relu")`
C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:25: UserWarning: Update your `Conv2D` call to the Keras 2 API: `Conv2D(512, (3, 3), activation="relu")`
C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:29: UserWarning: Update your `Conv2D` call to the Keras 2 API: `Conv2D(256, (3, 3), activation="relu")`
C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:49: UserWarning: Update your `Dense` call to the Keras 2 API: `Dense(activation="relu", units=128)`
C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:50: UserWarning: Update your `Dense` call to the Keras 2 API: `Dense(activation="softmax", units=5)`
Found 499 images belonging to 5 classes.
Found 150 images belonging to 5 classes.
C:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:89: UserWarning: Update your `fit_generator` call to the Keras 2 API: `fit_generator(<keras.pre..., epochs=50, validation_data=<keras.pre..., callbacks=[<keras.ca..., validation_steps=800, steps_per_epoch=200)`
Epoch 1/50
200/200 [==============================] - 94s - loss: 12.8434 - acc: 0.1992 - val_loss: 12.8844 - val_acc: 0.2006
Epoch 2/50
200/200 [==============================] - 93s - loss: 12.8873 - acc: 0.2004 - val_loss: 12.8844 - val_acc: 0.2006
Epoch 3/50
200/200 [==============================] - 91s - loss: 12.8873 - acc: 0.2004 - val_loss: 12.9146 - val_acc: 0.1988
Epoch 4/50
200/200 [==============================] - 93s - loss: 12.8891 - acc: 0.2003 - val_loss: 12.8844 - val_acc: 0.2006
Epoch 5/50
200/200 [==============================] - 91s - loss: 12.8855 - acc: 0.2006 - val_loss: 12.8743 - val_acc: 0.2013
Epoch 6/50
200/200 [==============================] - 93s - loss: 12.8864 - acc: 0.2005 - val_loss: 12.8743 - val_acc: 0.2013
Epoch 7/50
200/200 [==============================] - 91s - loss: 12.8891 - acc: 0.2003 - val_loss: 12.8844 - val_acc: 0.2006
Epoch 8/50
200/200 [==============================] - 91s - loss: 12.8855 - acc: 0.2006 - val_loss: 12.8945 - val_acc: 0.2000
Epoch 9/50
200/200 [==============================] - 91s - loss: 12.8882 - acc: 0.2004 - val_loss: 12.9247 - val_acc: 0.1981
Epoch 10/50
200/200 [==============================] - 91s - loss: 12.8891 - acc: 0.2003 - val_loss: 12.9247 - val_acc: 0.1981
Epoch 11/50
200/200 [==============================] - 90s - loss: 12.8891 - acc: 0.2003 - val_loss: 12.8945 - val_acc: 0.2000
Epoch 00010: early stopping