{"cells":[{"metadata":{"trusted":true},"cell_type":"code","source":"#Import important libraries\nfrom PIL import Image\nfrom keras.preprocessing import image\nimport os\nimport numpy as np\nimport pandas as pd\n\nfrom subprocess import check_output\nprint(check_output([\"ls\", \"../input\"]).decode(\"utf8\"))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"trainLabels = pd.read_csv(\"../input/trainLabels.csv\")\ntrainLabels.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"listing = os.listdir(\"../input\") \nlisting.remove(\"trainLabels.csv\")\nnp.size(listing)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# input image dimensions\nimg_rows, img_cols = 200, 200\n\nimmatrix = []\nimlabel = []\n\nfor file in listing:\n    base = os.path.basename(\"../input/\" + file)\n    fileName = os.path.splitext(base)[0]\n    imlabel.append(trainLabels.loc[trainLabels.image==fileName, 'level'].values[0])\n    im = Image.open(\"../input/\" + file)   \n    img = im.resize((img_rows,img_cols))\n    gray = img.convert('L')\n    immatrix.append(np.array(gray).flatten())","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"immatrix = np.asarray(immatrix)\nimlabel = np.asarray(imlabel)","execution_count":21,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.utils import shuffle\n\ndata,Label = shuffle(immatrix,imlabel, random_state=2)\ntrain_data = [data,Label]\ntype(train_data)","execution_count":22,"outputs":[{"output_type":"execute_result","execution_count":22,"data":{"text/plain":"list"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"import matplotlib.pyplot as plt\nimport matplotlib\n\nimg=immatrix[167].reshape(img_rows,img_cols)\nplt.imshow(img)\nplt.imshow(img,cmap='gray')","execution_count":23,"outputs":[{"output_type":"execute_result","execution_count":23,"data":{"text/plain":"<matplotlib.image.AxesImage at 0x7fcf31a046a0>"},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"<Figure size 432x288 with 1 Axes>","image/png":"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\n"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"#batch_size to train\nbatch_size = 32\n# number of output classes\nnb_classes = 5\n# number of epochs to train\nnb_epoch = 5\n# number of convolutional filters to use\nnb_filters = 32\n# size of pooling area for max pooling\nnb_pool = 2\n# convolution kernel size\nnb_conv = 3\n(X, y) = (train_data[0],train_data[1])","execution_count":26,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.model_selection import train_test_split\n\n# STEP 1: split X and y into training and testing sets\n\nX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=4)\n\nprint(X_train.shape)\nprint(X_test.shape)\n\n#X_train = X_train.reshape(X_train.shape[0], 1, img_rows, img_cols)\n#X_test = X_test.reshape(X_test.shape[0], 1, img_rows, img_cols)\n\nX_train = X_train.reshape(X_train.shape[0], img_cols, img_rows, 1)\nX_test = X_test.reshape(X_test.shape[0], img_cols, img_rows, 1)\n\nX_train = X_train.astype('float32')\nX_test = X_test.astype('float32')\n\nX_train /= 255\nX_test /= 255\n\nprint('X_train shape:', X_train.shape)\nprint(X_train.shape[0], 'train samples')\nprint(X_test.shape[0], 'test samples')","execution_count":28,"outputs":[{"output_type":"stream","text":"(800, 40000)\n(200, 40000)\nX_train shape: (800, 200, 200, 1)\n800 train samples\n200 test samples\n","name":"stdout"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"from keras.utils import np_utils\n\n# convert class vectors to binary class matrices\nY_train = np_utils.to_categorical(y_train, nb_classes)\nY_test = np_utils.to_categorical(y_test, nb_classes)\n\ni = 100\nplt.imshow(X_train[i, 0], interpolation='nearest')\nprint(\"label : \", Y_train[i,:])","execution_count":29,"outputs":[{"output_type":"stream","text":"label :  [1. 0. 0. 0. 0.]\n","name":"stdout"},{"output_type":"display_data","data":{"text/plain":"<Figure size 432x288 with 1 Axes>","image/png":"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\n"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"from keras.models import Sequential\nfrom keras.layers.core import Dense, Dropout, Activation, Flatten\nfrom keras.layers.convolutional import Convolution2D, MaxPooling2D\nfrom keras.optimizers import SGD,RMSprop,adam\n\nmodel = Sequential()\n\nmodel.add(Convolution2D(nb_filters, nb_conv, nb_conv,\n                        border_mode='valid',\n                        input_shape=(img_cols, img_rows, 1)))\nconvout1 = Activation('relu')\nmodel.add(convout1)\nmodel.add(Convolution2D(nb_filters, nb_conv, nb_conv))\nconvout2 = Activation('relu')\nmodel.add(convout2)\nmodel.add(MaxPooling2D(pool_size=(nb_pool, nb_pool)))\nmodel.add(Dropout(0.5))\n\nmodel.add(Flatten())\nmodel.add(Dense(128))\nmodel.add(Activation('relu'))\nmodel.add(Dropout(0.5))\nmodel.add(Dense(nb_classes))\nmodel.add(Activation('softmax'))\nmodel.compile(loss='categorical_crossentropy', optimizer='adadelta')#KERAS\nfrom keras.models import Sequential\nfrom keras.layers.core import Dense, Dropout, Activation, Flatten\nfrom keras.layers.convolutional import Convolution2D, MaxPooling2D\nfrom keras.optimizers import SGD,RMSprop,adam\n\nmodel = Sequential()\n\nmodel.add(Convolution2D(nb_filters, nb_conv, nb_conv,\n                        border_mode='valid',\n                        input_shape=(img_cols, img_rows, 1)))\nconvout1 = Activation('relu')\nmodel.add(convout1)\nmodel.add(Convolution2D(nb_filters, nb_conv, nb_conv))\nconvout2 = Activation('relu')\nmodel.add(convout2)\nmodel.add(MaxPooling2D(pool_size=(nb_pool, nb_pool)))\nmodel.add(Dropout(0.5))\n\nmodel.add(Flatten())\nmodel.add(Dense(128))\nmodel.add(Activation('relu'))\nmodel.add(Dropout(0.5))\nmodel.add(Dense(nb_classes))\nmodel.add(Activation('softmax'))\nmodel.compile(loss='categorical_crossentropy', optimizer='adadelta')","execution_count":30,"outputs":[{"output_type":"stream","text":"/opt/conda/lib/python3.6/site-packages/ipykernel_launcher.py:10: UserWarning: Update your `Conv2D` call to the Keras 2 API: `Conv2D(32, (3, 3), input_shape=(200, 200,..., padding=\"valid\")`\n  # Remove the CWD from sys.path while we load stuff.\n/opt/conda/lib/python3.6/site-packages/ipykernel_launcher.py:13: UserWarning: Update your `Conv2D` call to the Keras 2 API: `Conv2D(32, (3, 3))`\n  del sys.path[0]\n/opt/conda/lib/python3.6/site-packages/ipykernel_launcher.py:35: UserWarning: Update your `Conv2D` call to the Keras 2 API: `Conv2D(32, (3, 3), input_shape=(200, 200,..., padding=\"valid\")`\n/opt/conda/lib/python3.6/site-packages/ipykernel_launcher.py:38: UserWarning: Update your `Conv2D` call to the Keras 2 API: `Conv2D(32, (3, 3))`\n","name":"stderr"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(model.summary())","execution_count":32,"outputs":[{"output_type":"stream","text":"_________________________________________________________________\nLayer (type)                 Output Shape              Param #   \n=================================================================\nconv2d_9 (Conv2D)            (None, 198, 198, 32)      320       \n_________________________________________________________________\nactivation_5 (Activation)    (None, 198, 198, 32)      0         \n_________________________________________________________________\nconv2d_10 (Conv2D)           (None, 196, 196, 32)      9248      \n_________________________________________________________________\nactivation_6 (Activation)    (None, 196, 196, 32)      0         \n_________________________________________________________________\nmax_pooling2d_5 (MaxPooling2 (None, 98, 98, 32)        0         \n_________________________________________________________________\ndropout_7 (Dropout)          (None, 98, 98, 32)        0         \n_________________________________________________________________\nflatten_3 (Flatten)          (None, 307328)            0         \n_________________________________________________________________\ndense_5 (Dense)              (None, 128)               39338112  \n_________________________________________________________________\nactivation_7 (Activation)    (None, 128)               0         \n_________________________________________________________________\ndropout_8 (Dropout)          (None, 128)               0         \n_________________________________________________________________\ndense_6 (Dense)              (None, 5)                 645       \n_________________________________________________________________\nactivation_8 (Activation)    (None, 5)                 0         \n=================================================================\nTotal params: 39,348,325\nTrainable params: 39,348,325\nNon-trainable params: 0\n_________________________________________________________________\nNone\n","name":"stdout"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"from keras.preprocessing.image import ImageDataGenerator\n\n# create generators  - training data will be augmented images\nvalidationdatagenerator = ImageDataGenerator()\ntraindatagenerator = ImageDataGenerator(width_shift_range=0.1,height_shift_range=0.1,rotation_range=15,zoom_range=0.1 )\n\nbatchsize=8\ntrain_generator=traindatagenerator.flow(X_train, Y_train, batch_size=batchsize) \nvalidation_generator=validationdatagenerator.flow(X_test, Y_test,batch_size=batchsize)","execution_count":34,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model.fit_generator(train_generator, steps_per_epoch=int(len(X_train)/batchsize), epochs=3, validation_data=validation_generator, validation_steps=int(len(X_test)/batchsize))","execution_count":35,"outputs":[{"output_type":"stream","text":"Epoch 1/3\n100/100 [==============================] - 6s 62ms/step - loss: 1.9733 - val_loss: 0.9543\nEpoch 2/3\n100/100 [==============================] - 4s 38ms/step - loss: 0.9770 - val_loss: 0.9199\nEpoch 3/3\n100/100 [==============================] - 4s 38ms/step - loss: 0.9462 - val_loss: 1.1738\n","name":"stdout"},{"output_type":"execute_result","execution_count":35,"data":{"text/plain":"<keras.callbacks.History at 0x7fcf29d02b38>"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"scores = model.evaluate(X_test, Y_test)\nprint(scores)","execution_count":39,"outputs":[{"output_type":"stream","text":"200/200 [==============================] - 0s 466us/step\n1.1738282823562622\n","name":"stdout"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.6","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}