{"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 tensorflow as tf\nimport numpy as np\nimport pandas as pd\nfrom sklearn.model_selection import train_test_split as tts","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2021-05-21T08:33:08.080914Z","iopub.execute_input":"2021-05-21T08:33:08.081298Z","iopub.status.idle":"2021-05-21T08:33:13.759988Z","shell.execute_reply.started":"2021-05-21T08:33:08.081236Z","shell.execute_reply":"2021-05-21T08:33:13.759241Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"batch_size=32\nnum_classes=100","metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","execution":{"iopub.status.busy":"2021-05-21T09:23:18.573403Z","iopub.execute_input":"2021-05-21T09:23:18.573731Z","iopub.status.idle":"2021-05-21T09:23:18.577771Z","shell.execute_reply.started":"2021-05-21T09:23:18.5737Z","shell.execute_reply":"2021-05-21T09:23:18.57661Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from keras.datasets import cifar10\n\n(x_train, y_train), (x_test, y_test) = cifar10.load_data()\nprint('x_train shape:', x_train.shape)\nprint('y_train shape:', y_train.shape)\nprint(x_train.shape[0], 'train samples')\nprint(x_test.shape[0], 'test samples')","metadata":{"execution":{"iopub.status.busy":"2021-05-21T09:22:51.63109Z","iopub.execute_input":"2021-05-21T09:22:51.631443Z","iopub.status.idle":"2021-05-21T09:22:57.203705Z","shell.execute_reply.started":"2021-05-21T09:22:51.631411Z","shell.execute_reply":"2021-05-21T09:22:57.202976Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import matplotlib.pyplot as plt\n\nclasses = ['plane', 'car', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']\nnum_classes = len(classes)\nsamples_per_class = 5\n\nfor y, cls in enumerate(classes):\n    idxs = np.flatnonzero(y_train == y)\n    idxs = np.random.choice(idxs, samples_per_class, replace=False)\n    for i, idx in enumerate(idxs):\n        plt_idx = i * num_classes + y + 1\n        plt.subplot(samples_per_class, num_classes, plt_idx)\n        plt.imshow(x_train[idx].astype('uint8'))\n        plt.axis('off')\n        if i == 0:\n            plt.title(cls)\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2021-05-21T08:33:34.026112Z","iopub.execute_input":"2021-05-21T08:33:34.026481Z","iopub.status.idle":"2021-05-21T08:33:35.452063Z","shell.execute_reply.started":"2021-05-21T08:33:34.02645Z","shell.execute_reply":"2021-05-21T08:33:35.45084Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"x_train=x_train/255\nx_test=x_test/255","metadata":{"execution":{"iopub.status.busy":"2021-05-21T09:23:03.375867Z","iopub.execute_input":"2021-05-21T09:23:03.376179Z","iopub.status.idle":"2021-05-21T09:23:03.875021Z","shell.execute_reply.started":"2021-05-21T09:23:03.376152Z","shell.execute_reply":"2021-05-21T09:23:03.874094Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_train = tf.keras.utils.to_categorical(y_train, num_classes)\ny_test = tf.keras.utils.to_categorical(y_test, num_classes)","metadata":{"execution":{"iopub.status.busy":"2021-05-21T09:23:23.050056Z","iopub.execute_input":"2021-05-21T09:23:23.050395Z","iopub.status.idle":"2021-05-21T09:23:23.067103Z","shell.execute_reply.started":"2021-05-21T09:23:23.050365Z","shell.execute_reply":"2021-05-21T09:23:23.066366Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import keras\nfrom keras.models import Sequential\nfrom keras.layers import Conv2D,Dense,AveragePooling2D,MaxPooling2D, Flatten, Dropout, BatchNormalization\nfrom keras.optimizers import Adam\nfrom keras.callbacks import EarlyStopping, LearningRateScheduler","metadata":{"execution":{"iopub.status.busy":"2021-05-21T09:23:26.22499Z","iopub.execute_input":"2021-05-21T09:23:26.225344Z","iopub.status.idle":"2021-05-21T09:23:26.230172Z","shell.execute_reply.started":"2021-05-21T09:23:26.225313Z","shell.execute_reply":"2021-05-21T09:23:26.229311Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = Sequential()\n\nmodel.add(Conv2D(filters=32,kernel_size=(3,3),padding='same',input_shape=x_train.shape[1:],activation='relu'))\nmodel.add(Conv2D(filters=64,kernel_size=(3,3),padding='same',activation='relu'))\nmodel.add(BatchNormalization())\nmodel.add(MaxPooling2D(pool_size=(2,2)))\nmodel.add(Dropout(0.25))\n\nmodel.add(Conv2D(filters=64,kernel_size=(3,3),padding='same',activation='relu'))\nmodel.add(Conv2D(filters=128,kernel_size=(5,5),padding='same',activation='relu'))\nmodel.add(BatchNormalization())\nmodel.add(MaxPooling2D(pool_size=(2,2)))\nmodel.add(Dropout(0.5))\n\nmodel.add(Conv2D(filters=128,kernel_size=(3,3),padding='same',activation='relu'))\nmodel.add(Conv2D(filters=256,kernel_size=(5,5),padding='same',activation='relu'))\nmodel.add(BatchNormalization())\nmodel.add(MaxPooling2D(pool_size=(2,2)))\nmodel.add(Dropout(0.25))\n\nmodel.add(Flatten())\n\nmodel.add(Dense(units=1024,activation='relu'))\nmodel.add(Dense(units=1024,activation='relu'))\nmodel.add(Dense(units=num_classes,activation='softmax'))\n\nmodel.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])","metadata":{"execution":{"iopub.status.busy":"2021-05-21T09:02:56.647955Z","iopub.execute_input":"2021-05-21T09:02:56.648315Z","iopub.status.idle":"2021-05-21T09:02:56.933168Z","shell.execute_reply.started":"2021-05-21T09:02:56.64828Z","shell.execute_reply":"2021-05-21T09:02:56.932234Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"x_val=x_train[:5000]\ny_val=y_train[:5000]","metadata":{"execution":{"iopub.status.busy":"2021-05-21T09:23:47.496801Z","iopub.execute_input":"2021-05-21T09:23:47.497121Z","iopub.status.idle":"2021-05-21T09:23:47.501317Z","shell.execute_reply.started":"2021-05-21T09:23:47.497092Z","shell.execute_reply":"2021-05-21T09:23:47.500436Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"x_train=x_train[5000:]\ny_train=y_train[5000:]","metadata":{"execution":{"iopub.status.busy":"2021-05-21T09:23:49.925909Z","iopub.execute_input":"2021-05-21T09:23:49.926224Z","iopub.status.idle":"2021-05-21T09:23:49.930713Z","shell.execute_reply.started":"2021-05-21T09:23:49.926193Z","shell.execute_reply":"2021-05-21T09:23:49.929553Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(x_val.shape)\nprint(x_train.shape)","metadata":{"execution":{"iopub.status.busy":"2021-05-21T08:34:45.897917Z","iopub.execute_input":"2021-05-21T08:34:45.898238Z","iopub.status.idle":"2021-05-21T08:34:45.902585Z","shell.execute_reply.started":"2021-05-21T08:34:45.898208Z","shell.execute_reply":"2021-05-21T08:34:45.901753Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"earlystopping = tf.keras.callbacks.EarlyStopping(monitor =\"val_accuracy\",\n                              mode = 'auto', patience = 10,\n                              restore_best_weights = True)","metadata":{"execution":{"iopub.status.busy":"2021-05-21T09:03:06.462777Z","iopub.execute_input":"2021-05-21T09:03:06.46312Z","iopub.status.idle":"2021-05-21T09:03:06.467774Z","shell.execute_reply.started":"2021-05-21T09:03:06.46309Z","shell.execute_reply":"2021-05-21T09:03:06.466816Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#learning decay\n\ndef scheduler(epoch, lr):\n  if epoch < 10:\n    return lr\n  else:\n    return lr * tf.math.exp(-0.1)\n\nlr_decay=LearningRateScheduler(scheduler)","metadata":{"execution":{"iopub.status.busy":"2021-05-21T09:03:25.455028Z","iopub.execute_input":"2021-05-21T09:03:25.455373Z","iopub.status.idle":"2021-05-21T09:03:25.462473Z","shell.execute_reply.started":"2021-05-21T09:03:25.455338Z","shell.execute_reply":"2021-05-21T09:03:25.461586Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"callback_lists=[earlystopping,lr_decay]","metadata":{"execution":{"iopub.status.busy":"2021-05-21T09:03:28.710464Z","iopub.execute_input":"2021-05-21T09:03:28.71079Z","iopub.status.idle":"2021-05-21T09:03:28.717348Z","shell.execute_reply.started":"2021-05-21T09:03:28.71076Z","shell.execute_reply":"2021-05-21T09:03:28.716512Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"history=model.fit(x_train,y_train , epochs=50, batch_size=batch_size, validation_data=(x_val,y_val),callbacks=[callback_lists],verbose =1, shuffle=True)","metadata":{"execution":{"iopub.status.busy":"2021-05-21T09:04:48.678737Z","iopub.execute_input":"2021-05-21T09:04:48.679071Z","iopub.status.idle":"2021-05-21T09:15:14.538828Z","shell.execute_reply.started":"2021-05-21T09:04:48.679041Z","shell.execute_reply":"2021-05-21T09:15:14.538054Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import matplotlib.pyplot as plt\n\ndef plotmodelhistory(history): \n    fig, axs = plt.subplots(1,2,figsize=(15,5)) \n    # summarize history for accuracy\n    axs[0].plot(history.history['accuracy']) \n    axs[0].plot(history.history['val_accuracy']) \n    axs[0].set_title('Model Accuracy')\n    axs[0].set_ylabel('Accuracy') \n    axs[0].set_xlabel('Epoch')\n    axs[0].legend(['train', 'validate'], loc='upper left')\n    # summarize history for loss\n    axs[1].plot(history.history['loss']) \n    axs[1].plot(history.history['val_loss']) \n    axs[1].set_title('Model Loss')\n    axs[1].set_ylabel('Loss') \n    axs[1].set_xlabel('Epoch')\n    axs[1].legend(['train', 'validate'], loc='upper left')\n    plt.show()\n\n# list all data in history\nprint(history.history.keys())\n\nplotmodelhistory(history)","metadata":{"execution":{"iopub.status.busy":"2021-05-21T09:15:14.542328Z","iopub.execute_input":"2021-05-21T09:15:14.542586Z","iopub.status.idle":"2021-05-21T09:15:14.856141Z","shell.execute_reply.started":"2021-05-21T09:15:14.542559Z","shell.execute_reply":"2021-05-21T09:15:14.855202Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Score trained model.\nscores = model.evaluate(x_test, y_test, verbose=1)\nprint('Test loss:', scores[0])\nprint('Test accuracy:', scores[1])\n\n# make prediction.\npred = model.predict(x_test)","metadata":{"execution":{"iopub.status.busy":"2021-05-21T09:15:14.858365Z","iopub.execute_input":"2021-05-21T09:15:14.858787Z","iopub.status.idle":"2021-05-21T09:15:17.33615Z","shell.execute_reply.started":"2021-05-21T09:15:14.858747Z","shell.execute_reply":"2021-05-21T09:15:17.335354Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Test Accuracy : 0.85119**","metadata":{}}]}