{"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":"markdown","source":"# Main Library","metadata":{}},{"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":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Reading Data & Label","metadata":{}},{"cell_type":"markdown","source":"# Make Augmentation","metadata":{}},{"cell_type":"code","source":"data_aug = tf.keras.Sequential([\n    tf.keras.layers.RandomFlip(\"horizontal\", (128, 128, 3)), \n    tf.keras.layers.RandomRotation(0.1),\n    tf.keras.layers.RandomZoom(0.1)\n])","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"path_train = r\"D:\\Courses language programming\\6_Deep Learning\\Deep Learning Project\\Folder\\cifar-10\\train\"\npath_test = r\"D:\\Courses language programming\\6_Deep Learning\\Deep Learning Project\\Folder\\cifar-10\\test\"\nlabel_df = pd.read_csv(r\"D:\\Courses language programming\\6_Deep Learning\\Deep Learning Project\\Folder\\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        y = class_name.index(label_df[int(image.split(\".\")[0]) - 1][1])\n        label.append(y)\n        for _ in range(2):\n            new_img = data_aug(tf.expand_dims(img, 0))[0]\n            train_data.append(new_img)\n            label.append(y)\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_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Make Preprocessing Data","metadata":{}},{"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 = np.array(label)\nlabel_img = to_categorical(label, 10)\nlabel_img","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"label_img[0]","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=50)\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":"code","source":"x_train.shape, y_train.shape,x_test.shape, y_test.shape","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":"code","source":"x_train.shape, y_train.shape","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## ----------------------------------------------------------------------------------------------------------------------------\n## ----------------------------------------------------------------------------------------------------------------------------\n## ----------------------------------------------------------------------------------------------------------------------------","metadata":{}},{"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=\"same\"))\nmodel.add(k.layers.MaxPool2D((2, 2)))\n\nmodel.add(k.layers.Conv2D(64, (3, 3), activation=\"relu\", padding=\"valid\"))\nmodel.add(k.layers.AveragePooling2D((2, 2)))\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=\"same\"))\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.BatchNormalization())\nmodel.add(k.layers.Dense(128, activation=\"sigmoid\"))\nmodel.add(k.layers.Activation(\"relu\"))\nmodel.add(k.layers.Dropout(0.5))\n\nmodel.add(k.layers.Dense(32, activation=\"relu\"))\nmodel.add(k.layers.Dropout(0.5))\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.2)","metadata":{"scrolled":true},"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.evaluate(x_test, y_test)\n\nprint(f\"The Accuracy Testing Data is ==> {round(accuracy, 4)} %\")\nprint(f\"The loss Testing Data is ==> {round(loss, 4)}\")","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## ----------------------------------------------------------------------------------------------------------------------------\n## ----------------------------------------------------------------------------------------------------------------------------\n## ----------------------------------------------------------------------------------------------------------------------------","metadata":{}},{"cell_type":"markdown","source":"# Dowload Model","metadata":{}},{"cell_type":"code","source":"pickle.dump(model, open(r\"D:\\Pycharm\\model_pickle\\Cifar-10.bin\", \"wb\"))","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# model = pickle.load(open(r\"D:\\Pycharm\\model_pickle\\Cifar-10.bin\", \"rb\"))\n# class_name = [\"airplane\", \"automobile\", \"bird\",\"cat\", \"deer\", \"dog\",\"frog\",\"horse\", \"ship\",\"truck\"]","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Prediction","metadata":{}},{"cell_type":"code","source":"prediction = model.predict(test_data)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"predictionction","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"prediction = [class_name[np.argmax(i)] for i in prediction]\nprediction","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Submition","metadata":{}},{"cell_type":"code","source":"submit = pd.DataFrame({\"id\": range(1, len(prediction)+1),\n                       \"label\": prediction})\n\nsubmit.head(5)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submition.to_csv(r\"D:\\Courses language programming\\6_Deep Learning\\Deep Learning Project\\Folder\\cifar-10\\Submition.csv\", index=False)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Pre Training Model","metadata":{}},{"cell_type":"code","source":"model_pre = k.applications.efficientnet.EfficientNetB7()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model_1 = k.models.Sequential()\nfor layer in model_mobilenet.layers[:-1]:\n    model_1.add(layer)\nfor layers in model_1.layers:\n    layers.trainable = False\n    \n    \nmodel_1.add(Dense(10, activation=\"softmax\"))\nmodel_1.compile(optimizer=\"adam\", loss=\"categorical_crossentropy\", metrics=[\"accuracy\"])\nmodel_1.summary()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model_1.fit(x_train, y_train, epochs=2, validation_data=(x_test, y_test), validation_split=0.4)","metadata":{},"execution_count":null,"outputs":[]}]}