{"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":"# Reading Data\nimport os\nimport pandas as pd\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nimport cv2\n\n# Make Preprocessing Data\nfrom sklearn.utils import shuffle\nfrom keras.utils import to_categorical\nfrom sklearn.model_selection import train_test_split\nfrom imblearn.over_sampling import SMOTE\n\n# Building Model\nimport tensorflow as tf\nimport tensorflow.keras as k\n\n# Loding Model\nimport pickle","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2023-08-18T00:09:31.148304Z","iopub.execute_input":"2023-08-18T00:09:31.148738Z","iopub.status.idle":"2023-08-18T00:09:50.819832Z","shell.execute_reply.started":"2023-08-18T00:09:31.148710Z","shell.execute_reply":"2023-08-18T00:09:50.818832Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Reading Data","metadata":{}},{"cell_type":"code","source":"path_train = r\"/kaggle/input/cifar-10/train.7z\"\npath_test = r\"/kaggle/input/cifar-10/test.7z\"\nlabel_df = pd.read_csv(r\"/kaggle/input/cifar-10/trainLabels.csv\").values\n\ntrain_data = []\ntest_data = []\n\nlabel = []\nclass_name = [\"airplane\", \"automobile\", \"bird\",\"cat\", \"deer\", \"dog\",\"frog\",\"horse\", \"ship\",\"truck\"]\n\n# Loading Training Data\nfor file in os.listdir(path_train):\n    images = os.listdir(path_train + \"\\\\\" + file)\n    for image in images:\n        img = cv2.imread(path_train + \"\\\\\" + file + \"\\\\\" + image)\n        img = cv2.resize(img, (48, 48))\n        train_data.append(img)\n        label.append([class_name.index(label_df[int(image.split(\".\")[0]) - 1][1])])\n\nprint(\"--------- Done --------\")\n        \n# Loading Testing Data\nfor file in os.listdir(path_test):\n    images = os.listdir(path_test + \"\\\\\" + file)\n    for image in images:\n        img = cv2.imread(path_test + \"\\\\\" + file + \"\\\\\" + image)\n        img = cv2.resize(img, (48, 48))\n        test_data.append(img)\n\nprint(\"--------- Done --------\")\n\n\nprint(\"Training Length images is ==> \",len(test_data))\nprint(\"Testing Length images is ==> \",len(train_data))","metadata":{"execution":{"iopub.status.busy":"2023-08-18T00:15:34.561697Z","iopub.execute_input":"2023-08-18T00:15:34.562446Z","iopub.status.idle":"2023-08-18T00:15:34.568531Z","shell.execute_reply.started":"2023-08-18T00:15:34.562411Z","shell.execute_reply":"2023-08-18T00:15:34.567308Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Training\ntrain_data = np.array(train_data)\ntrain_data = train_data.astype(\"float32\")\ntrain_data = train_data / 255.0\n\n# Testing\ntest_data = np.array(test_data)\ntest_data = test_data.astype(\"float32\")\ntest_data = test_data / 255.0","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"label = [i[0] for i in label]\nlabel = np.array(label)\nlabel_img = to_categorical(label, 10)\nlabel_img","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Shuffle & Split ==> Data","metadata":{}},{"cell_type":"code","source":"x_img, y_label = shuffle(train_data, label_img, random_state=4)\nx_train, x_test, y_train, y_test = train_test_split(x_img, y_label, train_size=0.7, random_state=42)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Show Some Data","metadata":{}},{"cell_type":"code","source":"plt.figure(figsize=(10, 10))\nfor i in range(0, 25):\n    plt.subplot(5, 5, i+1)\n    plt.xticks([])\n    plt.yticks([])\n    plt.imshow(x_train[i])\n    plt.title(class_name[np.argmax(y_train[i])])","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Building Model from Scratch","metadata":{}},{"cell_type":"code","source":"model = k.models.Sequential()\n\nmodel.add(k.layers.Conv2D(16, (5, 5), activation=\"relu\", input_shape=(48, 48, 3), padding=\"same\"))\nmodel.add(k.layers.AveragePooling2D((2, 2)))\n\nmodel.add(k.layers.Conv2D(32, (4, 4), activation=\"relu\",  padding=\"valid\"))\nmodel.add(k.layers.AveragePooling2D((2, 2)))\n\nmodel.add(k.layers.Conv2D(64, (3, 3), activation=\"relu\", padding=\"valid\"))\n\nmodel.add(k.layers.Conv2D(64, (3, 3), activation=\"relu\", padding=\"same\"))\nmodel.add(k.layers.AveragePooling2D((2, 2)))\n\nmodel.add(k.layers.Conv2D(128, (2, 2), activation=\"relu\", padding=\"valid\"))\nmodel.add(k.layers.MaxPool2D((2, 2)))\n\nmodel.add(k.layers.Conv2D(256, (2, 2), activation=\"relu\", padding=\"same\"))\n\nmodel.add(k.layers.Flatten())\n\nmodel.add(k.layers.Dense(128, activation=\"relu\"))\nmodel.add(k.layers.Dropout(0.2))\n\nmodel.add(k.layers.Dense(32, activation=\"relu\"))\nmodel.add(k.layers.Dropout(0.2))\n\nmodel.add(k.layers.Dense(10, activation=\"softmax\"))\n\nmodel.compile(optimizer=\"nadam\", loss=k.losses.CategoricalCrossentropy(), metrics=[\"accuracy\"])\n\nmodel.summary()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"history = model.fit(x_train, y_train, epochs=50, validation_data=(x_test, y_test), validation_split=0.4)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.plot(history.history[\"loss\"], label=\"Loss\")\nplt.plot(history.history[\"val_loss\"], label=\"Val_Loss\")\n\nplt.xlabel(\"Epochs\")\nplt.ylabel(\"Loss\")\n\nplt.title(\"Loss Vs Epochs\")\n\nplt.legend()\nplt.grid()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.plot(history.history[\"accuracy\"], label=\"accuracy\")\nplt.plot(history.history[\"val_accuracy\"], label=\"val_accuracy\")\n\nplt.xlabel(\"Epochs\")\nplt.ylabel(\"Accuracy\")\n\nplt.title(\"Accuracy Vs Epochs\")\n\nplt.legend()\nplt.grid()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"loss, accuracy = model_mask.evaluate(x_test, y_test)\n\nprint(f\"The Accuracy Testing Data is ==> {accuracy} %\")\nprint(f\"The loss Testing Data is ==> {loss}\")","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}