{"metadata":{"kernelspec":{"display_name":"Python 3 (ipykernel)","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.7.16"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":5441,"databundleVersionId":38425,"sourceType":"competition"}],"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Main Library","metadata":{}},{"cell_type":"code","source":"# Reading Data & Visualization\nimport os\nimport random\nfrom PIL import Image\nimport cv2\nimport numpy as np\nimport matplotlib.pyplot as plt\n\n# Preprocessing & Training Model\nfrom sklearn.utils import shuffle\nfrom sklearn.model_selection import train_test_split\nfrom tensorflow.keras.utils import to_categorical\nfrom keras.utils import np_utils\n\nimport tensorflow as tf\nimport tensorflow.keras as k\nfrom keras.layers import Dense, Dropout, Conv2D, Activation\n\n# Loading Model\nimport pickle","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Reading Image","metadata":{}},{"cell_type":"code","source":"# Reading image\n\ntrain_list = os.listdir(r\"D:\\Courses language programming\\6_Deep Learning\\Deep Learning Project\\Folder\\Dogs-Vs-Cats\\train\")\ntest_list = os.listdir(r\"D:\\Courses language programming\\6_Deep Learning\\Deep Learning Project\\Folder\\Dogs-Vs-Cats\\test\")\n\ntrain_path = r\"D:\\Courses language programming\\6_Deep Learning\\Deep Learning Project\\Folder\\Dogs-Vs-Cats\\train\"\ntest_path = r\"D:\\Courses language programming\\6_Deep Learning\\Deep Learning Project\\Folder\\Dogs-Vs-Cats\\test\"\n\n\nimage_train = []\nimage_test = []\n\nlabel_train = []\n\ncount_dog = 0\ncount_cat = 0\n\n\nfor image in train_list:\n    if image.split(\".\")[0] == \"dog\":\n        label_train.append(1)\n        count_dog += 1\n    else:\n        label_train.append(0)\n        count_cat += 1\n    \n    input_image = cv2.imread(train_path + \"\\\\\" + image)\n    input_image = cv2.resize(input_image, (128, 128))\n    image_train.append(input_image)\n    print(\"---------------------------Done ---------------------------\", count_cat, count_dog)\n    \n    \nfor image in test_list:\n    input_image = cv2.imread(test_path + \"\\\\\" + image)\n    input_image = cv2.resize(input_image, (128, 128))\n    image_test.append(input_image)\n    \ncount_dog, count_cat, len(label_train)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Prepering Data","metadata":{}},{"cell_type":"code","source":"data_train = np.array(image_train)\ndata_train = data_train.astype(\"float32\")\ndata_train = data_train / 255.0\n\ndata_test = np.array(image_test)\ndata_test = data_test.astype(\"float32\")\ndata_test = data_test / 255.0\n\nlabel_train = np.array(label_train)\n\nprint(data_train.shape)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"name_label = [\"Cat\", \"Dog\"]\n\nimage_label = np_utils.to_categorical(label_train, len(name_label))","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"x_img, y_img = shuffle(data_train, image_label)\nx_train, x_test, y_train, y_test = train_test_split(x_img, y_img, train_size=0.8)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize=(10, 10))\nfor i in range(25):\n    plt.subplot(5, 5, i+1)\n    plt.xticks([])\n    plt.yticks([])\n    image = random.choice(range(len(x_train)))\n    new_image = cv2.cvtColor(x_train[image], cv2.COLOR_BGR2RGB)\n    plt.imshow(new_image)\n    plt.title(name_label[y_train[image].argmax()])","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## ======================================================================\n## ======================================================================\n## ======================================================================\n## ======================================================================\n## ======================================================================\n## ======================================================================","metadata":{}},{"cell_type":"markdown","source":"# Building Model ==> CNN Model","metadata":{}},{"cell_type":"code","source":"model_cnn = k.models.Sequential()\n\nmodel_cnn.add(Conv2D(16, (5, 5), input_shape=(128, 128, 3), activation=\"relu\", padding=\"same\"))\nmodel_cnn.add(k.layers.AveragePooling2D(2, 2))\n\nmodel_cnn.add(Conv2D(32, (4, 4), activation=\"relu\", padding=\"same\"))\nmodel_cnn.add(Activation(\"relu\"))\nmodel_cnn.add(k.layers.AveragePooling2D(2, 2))\n\nmodel_cnn.add(Conv2D(64, (3, 3), activation=\"relu\", padding=\"same\"))\nmodel_cnn.add(k.layers.AveragePooling2D(2, 2))\n\nmodel_cnn.add(Conv2D(128, (2, 2), activation=\"relu\", padding=\"same\"))\nmodel_cnn.add(k.layers.MaxPool2D(2, 2))\n\n# ===================================================================================================\nmodel_cnn.add(k.layers.Flatten())\nmodel_cnn.add(Dense(128, activation=\"sigmoid\"))\nmodel_cnn.add(Dropout(0.2))\n\nmodel_cnn.add(Dense(32, activation=\"sigmoid\"))\nmodel_cnn.add(Dropout(0.2))\n\nmodel_cnn.add(Dense(2, activation=\"softmax\"))\n\nmodel_cnn.compile(optimizer=\"nadam\", loss=k.losses.CategoricalCrossentropy(), metrics=[\"accuracy\"])\nmodel_cnn.summary()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"history = model_cnn.fit(x_train, y_train, epochs=5, validation_data=(x_test, y_test), validation_split=0.2)","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_cnn.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":"markdown","source":"## ==========================================================================\n## ==========================================================================\n## ==========================================================================\n## ==========================================================================","metadata":{}},{"cell_type":"markdown","source":"## Download Model","metadata":{}},{"cell_type":"code","source":"pickle.dump(model_cnn, open(\"D:\\Pycharm\\model_pickle\\Dogs&Cats_without_pretraining_mode.bin\", \"wb\"))","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# System Prediction","metadata":{}},{"cell_type":"code","source":"path_img = input()\nimage = cv2.imread(path_img)\nimage_pre_new = cv2.resize(image, (128, 128))\nimage_pre_new = np.reshape(image_pre_new, [1, 128, 128, 3])\nprediction = model_cnn.predict(image_pre_new)\n\n\n# print(prediction)\nnew_prediction = name_label[np.argmax(prediction)]\nprint(\"The Prediction is ==> \", new_prediction)\n\n# ================== Show image And Label Prediction =================================\nimage = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)\nplt.imshow(image)\nplt.title(new_prediction)\nplt.show()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"prediction = model_cnn.predict(data_test)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"prediction = [pre.argmax() for pre in prediction]","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"prediction","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"len(prediction)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pandas as pd","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data = pd.DataFrame({\"id\": list(range(1, len(prediction)+1)),\n                     \"label\": prediction})","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data.head(10)","metadata":{"scrolled":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data.to_csv(r\"D:\\Courses language programming\\6_Deep Learning\\Deep Learning Project\\Folder\\Dogs-Vs-Cats\\submation_data.csv\", index=False)","metadata":{},"execution_count":null,"outputs":[]}]}