{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nimport tensorflow as tf\n\nfrom tensorflow.keras import datasets,layers,models\nfrom tensorflow.keras.utils import to_categorical\nfrom keras import optimizers\nfrom keras.preprocessing import image\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\nfrom tensorflow.keras.layers import Dense, Flatten, Conv2D, AveragePooling2D,MaxPooling2D, Dropout, BatchNormalization\n\n%matplotlib inline","metadata":{"id":"x4dBuZWOikKr"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"cifar10 = tf.keras.datasets.cifar10\n(X_train, Y_train), (X_test, Y_test) = cifar10.load_data()","metadata":{"id":"L68pEUCEi7O3"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#checking the shape\nprint(X_train.shape)\nprint(Y_train.shape)\nprint(X_test.shape)\nprint(Y_test.shape)","metadata":{"id":"49tGDGnejCsZ","outputId":"dc1b52fe-02ad-4064-c382-1fa4b7cad5e2"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#converting values to float and normalizing\nX_train = X_train.astype('float32')\nX_test = X_test.astype('float32')\nX_train=X_train/255\nX_test=X_test/255","metadata":{"id":"M6ei7ju1jSV2"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#encoding\nY_train = to_categorical(Y_train, 10)\nY_test = to_categorical(Y_test, 10)","metadata":{"id":"72W-nSuIeLZ3"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Input_shape = X_train.shape[1:]\nInput_shape","metadata":{"id":"lJI7dqqyeLah","outputId":"9147d6b2-46b7-4c31-9187-d2f7def4bf33"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"classes = ['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']","metadata":{"id":"VgHZG7uPjWgL"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#visualising samples\nplt.figure(figsize = (10,10))\nfor i in range(70):\n  plt.subplot(10,10,1+i)\n  plt.axis('off')\n  plt.imshow(X_train[i], cmap = 'gray')","metadata":{"id":"IDrZo9B-jW63","outputId":"b718e8dc-bcaf-4ba0-887e-b49ff3c625a0"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"cnn_model = models.Sequential()\ncnn_model.add(Conv2D(filters = 64, kernel_size = (3,3), activation = 'relu', input_shape = Input_shape))\ncnn_model.add(Conv2D(filters = 64, kernel_size = (3,3), activation = 'relu'))\ncnn_model.add(MaxPooling2D(2,2))\ncnn_model.add(Dropout(0.4))\n\n\ncnn_model.add(Conv2D(filters = 128, kernel_size = (3,3), activation = 'relu'))\ncnn_model.add(Conv2D(filters = 128, kernel_size = (3,3), activation = 'relu'))\ncnn_model.add(AveragePooling2D(2,2))\ncnn_model.add(Dropout(0.4))\n\ncnn_model.add(Flatten())\n\ncnn_model.add(Dense(units = 1024, activation = 'relu'))\n\ncnn_model.add(Dense(units = 1024, activation = 'relu'))\n\ncnn_model.add(Dense(units = 10, activation = 'softmax'))","metadata":{"id":"umG0sbW_jXfh"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"opt = optimizers.Adam(learning_rate = 0.001)\ncnn_model.compile(loss = 'categorical_crossentropy', optimizer = opt, metrics = ['accuracy'])","metadata":{"id":"9kSuVytxDjxQ"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"cnn_model.summary()","metadata":{"id":"Ja_igUHDDyj6","outputId":"b0d85f3a-29a4-4865-92b6-576b4faa2293"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# fitting the train data into the model\nhistory = cnn_model.fit(X_train, Y_train, batch_size = 32, epochs = 10, shuffle = True,validation_data=(X_test,Y_test))","metadata":{"id":"qPcQceOcEJ5-","outputId":"63e57cc7-a639-4f81-edc9-2ed2b31bfa43"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Evaluating the model performance\nevaluation = cnn_model.evaluate(X_test, Y_test)\nprint('Test Accuracy: {}'.format(evaluation[1]))","metadata":{"id":"26J5q_BTHN8H","outputId":"80667398-33e5-4e46-f838-ef4238c2843b"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"predicted_classes = cnn_model.predict_classes(X_test) \npredicted_classes","metadata":{"id":"QIQfOJduN3Px","outputId":"dbc63a2f-cc59-4450-bb56-07977e275d49"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Y_test = Y_test.argmax(1)\nY_test","metadata":{"id":"oYmyulv9MmIe","outputId":"093f9348-e1eb-4892-def0-d4969894fe42"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# plotting Confusion Matrix\nfrom sklearn.metrics import confusion_matrix\nimport seaborn as sns\n\ncm = confusion_matrix(Y_test, predicted_classes)\ncm\nplt.figure(figsize = (10, 10))\nsns.heatmap(cm, annot = True)","metadata":{"id":"VfG7l03VMosi","outputId":"fcee5fb5-9412-40b1-ef94-1a829fdaf71f"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# generating more data using the existing data\nfrom keras.preprocessing.image import ImageDataGenerator\n\ndatagen = ImageDataGenerator(\n                            #width_shift_range = 0.1,\n                            horizontal_flip = True,\n                             )\ndatagen.fit(X_train)","metadata":{"id":"R2MSZ1bAMotU"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# retraining the model\ncnn_model.fit_generator(datagen.flow(X_train, Y_train, batch_size = 32), epochs = 5)","metadata":{"id":"hi37nNStMox8","outputId":"2a169d70-0111-4aec-e640-a3e7d2057770"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# encoding the Predictor variable\nY_test = to_categorical(Y_test, 10)","metadata":{"id":"jHLWBQF_MzSF"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# printing the accuracy\nscore = cnn_model.evaluate(X_test, Y_test)\nprint('Test accuracy', score[0])","metadata":{"id":"F_WZNxwWMzS2","outputId":"cf336329-d1a5-4476-bb14-9457c0a6e4ed"},"execution_count":null,"outputs":[]}]}