In [124]:
import numpy as np
from matplotlib import pyplot as plt
import os
import cv2
%matplotlib inline

In [125]:
from sklearn.preprocessing import LabelEncoder
from sklearn.cross_validation import train_test_split

In [126]:
from keras.layers import Activation,Dense
from keras.utils.visualize_util import plot
from keras.utils import np_utils
from keras.models import Sequential

In [127]:
trainLoc = '../data/train/'
data = [os.path.join(trainLoc,f) for f in os.listdir(trainLoc)]

In [128]:
len(data)
print data[1:4]


['../data/train/cat.1.jpg', '../data/train/cat.10.jpg', '../data/train/cat.100.jpg']

In [129]:
def viewImage(x):
    plt.figure()
    plt.imshow(plt.imread(x))

def getFileLabel(x):
    return x.split(os.path.sep)[-1].split(".")[0]

In [130]:
viewImage(data[0])
viewImage(data[50])
viewImage(data[120])



In [131]:
def imageToFeatures(x,size=(32,32)):
    return cv2.resize(x,size).flatten()

In [132]:
inputX = np.array([imageToFeatures(cv2.imread(x)) for x in data])
inputY = np.array([getFileLabel(x) for x in data])

In [133]:
print(inputX.shape)
print(inputY.shape)


(25000, 3072)
(25000,)

In [134]:
le = LabelEncoder()
inputY = le.fit_transform(inputY)
inputY.shape


Out[134]:
(25000,)

In [135]:
inputY = np_utils.to_categorical(inputY)
inputY.shape


Out[135]:
(25000, 2)

In [136]:
inputX = inputX/255.0
trainX,testX,trainY,testY = train_test_split(inputX,inputY,random_state=4,test_size=0.20)
#trainX = inputX
#trainY = inputY

In [137]:
#keras layers
model = Sequential()
model.add(Dense(output_dim=768,input_dim=3072,activation="relu",name='layer1'))
model.add(Dense(384,activation='relu',name='layer2'))
model.add(Dense(2,activation='softmax',name='output'))

In [138]:
#keras compilation
model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy'])

In [139]:
model.fit(x=trainX,y=trainY,nb_epoch=20,batch_size=128,validation_split=0.1)


Train on 22500 samples, validate on 2500 samples
Epoch 1/20
22500/22500 [==============================] - 18s - loss: 0.7625 - acc: 0.5683 - val_loss: 0.7789 - val_acc: 0.4000
Epoch 2/20
22500/22500 [==============================] - 18s - loss: 0.6557 - acc: 0.6084 - val_loss: 0.6110 - val_acc: 0.7636
Epoch 3/20
22500/22500 [==============================] - 22s - loss: 0.6413 - acc: 0.6247 - val_loss: 0.7693 - val_acc: 0.4860
Epoch 4/20
22500/22500 [==============================] - 18s - loss: 0.6399 - acc: 0.6295 - val_loss: 0.7631 - val_acc: 0.4784
Epoch 5/20
22500/22500 [==============================] - 19s - loss: 0.6264 - acc: 0.6418 - val_loss: 0.8819 - val_acc: 0.3452
Epoch 6/20
22500/22500 [==============================] - 22s - loss: 0.6266 - acc: 0.6435 - val_loss: 0.9156 - val_acc: 0.2680
Epoch 7/20
22500/22500 [==============================] - 19s - loss: 0.6186 - acc: 0.6517 - val_loss: 1.1469 - val_acc: 0.1612
Epoch 8/20
22500/22500 [==============================] - 17s - loss: 0.6153 - acc: 0.6577 - val_loss: 0.8700 - val_acc: 0.3336
Epoch 9/20
22500/22500 [==============================] - 17s - loss: 0.6048 - acc: 0.6700 - val_loss: 0.5868 - val_acc: 0.6804
Epoch 10/20
22500/22500 [==============================] - 18s - loss: 0.6063 - acc: 0.6632 - val_loss: 0.6928 - val_acc: 0.5832
Epoch 11/20
22500/22500 [==============================] - 18s - loss: 0.6028 - acc: 0.6664 - val_loss: 0.7773 - val_acc: 0.4692
Epoch 12/20
22500/22500 [==============================] - 20s - loss: 0.5942 - acc: 0.6788 - val_loss: 0.6446 - val_acc: 0.6024
Epoch 13/20
22500/22500 [==============================] - 20s - loss: 0.5962 - acc: 0.6732 - val_loss: 0.6234 - val_acc: 0.6304
Epoch 14/20
22500/22500 [==============================] - 18s - loss: 0.5911 - acc: 0.6771 - val_loss: 0.6938 - val_acc: 0.5596
Epoch 15/20
22500/22500 [==============================] - 17s - loss: 0.5850 - acc: 0.6835 - val_loss: 0.6497 - val_acc: 0.6092
Epoch 16/20
22500/22500 [==============================] - 18s - loss: 0.5805 - acc: 0.6913 - val_loss: 0.8600 - val_acc: 0.3940
Epoch 17/20
22500/22500 [==============================] - 18s - loss: 0.5810 - acc: 0.6903 - val_loss: 0.8917 - val_acc: 0.4488
Epoch 18/20
22500/22500 [==============================] - 17s - loss: 0.5709 - acc: 0.6993 - val_loss: 0.7306 - val_acc: 0.5608
Epoch 19/20
22500/22500 [==============================] - 18s - loss: 0.5689 - acc: 0.7021 - val_loss: 1.0040 - val_acc: 0.2508
Epoch 20/20
22500/22500 [==============================] - 18s - loss: 0.5682 - acc: 0.6993 - val_loss: 0.8832 - val_acc: 0.4088
Out[139]:
<keras.callbacks.History at 0x150a10e50>

In [118]:
accuracy = model.evaluate(x=testX,y=testY,batch_size=32)


4832/5000 [===========================>..] - ETA: 0s

In [119]:
print '{0}:{1}'.format(model.metrics_names[1],accuracy[1])


acc:0.497

In [89]:
# serialize model to JSON
model_json = model.to_json()
with open("model.json", "w") as json_file:
    json_file.write(model_json)
# serialize weights to HDF5
model.save_weights("model.h5")
print("Saved model to disk")


Saved model to disk

In [90]:
plot(model,to_file='model.png',show_shapes=True)

In [ ]: