{"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":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n        #print(dirname)\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2022-05-04T20:33:18.673944Z","iopub.execute_input":"2022-05-04T20:33:18.674200Z","iopub.status.idle":"2022-05-04T20:33:18.683259Z","shell.execute_reply.started":"2022-05-04T20:33:18.674171Z","shell.execute_reply":"2022-05-04T20:33:18.682483Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import numpy as np \nimport pandas as pd\nimport cv2\nimport matplotlib.pyplot as plt\n#import tensorflow as tf\n#from tensorflow.keras.models import Sequential\n#from tensorflow.keras.layers import Dense, Flatten, Dropout, Activation, Conv2D, MaxPooling2D\nimport zipfile\n\nwith zipfile.ZipFile(\"../input/dogs-vs-cats-redux-kernels-edition/train.zip\",\"r\") as z:\n    z.extractall(\".\")\n    \nwith zipfile.ZipFile(\"../input/dogs-vs-cats-redux-kernels-edition/test.zip\",\"r\") as z:\n    z.extractall(\".\")","metadata":{"execution":{"iopub.status.busy":"2022-05-04T20:33:18.833868Z","iopub.execute_input":"2022-05-04T20:33:18.834515Z","iopub.status.idle":"2022-05-04T20:33:33.818981Z","shell.execute_reply.started":"2022-05-04T20:33:18.834480Z","shell.execute_reply":"2022-05-04T20:33:33.818246Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_X=[]\ntrain_y=[]\nmain_dir = \"/kaggle/working/\"\ntrain_dir = \"train\"\npath=os.path.join(main_dir,train_dir)\nfor i in os.listdir(path):\n    category=i.split(\".\")[0]\n    img = cv2.imread(os.path.join(path,i),0)\n    new_img=cv2.resize(img,dsize=(100,100))\n    train_X.append(new_img)\n    train_y.append(category)","metadata":{"execution":{"iopub.status.busy":"2022-05-04T20:33:33.820549Z","iopub.execute_input":"2022-05-04T20:33:33.820790Z","iopub.status.idle":"2022-05-04T20:33:55.774065Z","shell.execute_reply.started":"2022-05-04T20:33:33.820754Z","shell.execute_reply":"2022-05-04T20:33:55.773353Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Now I will encode the \"train_y\" list to 0 if cat and 1 if dog**","metadata":{}},{"cell_type":"code","source":"train_y=pd.DataFrame(train_y)\ndi={0:{'cat': 0, \"dog\": 1}}\ntrain_y=train_y.replace(di)","metadata":{"execution":{"iopub.status.busy":"2022-05-04T20:33:55.775335Z","iopub.execute_input":"2022-05-04T20:33:55.775643Z","iopub.status.idle":"2022-05-04T20:33:55.804521Z","shell.execute_reply.started":"2022-05-04T20:33:55.775592Z","shell.execute_reply":"2022-05-04T20:33:55.803869Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_y.head()","metadata":{"execution":{"iopub.status.busy":"2022-05-04T20:33:55.806777Z","iopub.execute_input":"2022-05-04T20:33:55.807089Z","iopub.status.idle":"2022-05-04T20:33:55.820078Z","shell.execute_reply.started":"2022-05-04T20:33:55.807053Z","shell.execute_reply":"2022-05-04T20:33:55.819449Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_y=np.array(train_y)\ntrain_X=np.array(train_X).reshape(-1,100,100,1)","metadata":{"execution":{"iopub.status.busy":"2022-05-04T20:33:55.821084Z","iopub.execute_input":"2022-05-04T20:33:55.822720Z","iopub.status.idle":"2022-05-04T20:33:55.920134Z","shell.execute_reply.started":"2022-05-04T20:33:55.822692Z","shell.execute_reply":"2022-05-04T20:33:55.919430Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_X=train_X/255.0\ntrain_X.shape","metadata":{"execution":{"iopub.status.busy":"2022-05-04T20:33:55.922146Z","iopub.execute_input":"2022-05-04T20:33:55.922658Z","iopub.status.idle":"2022-05-04T20:33:56.536712Z","shell.execute_reply.started":"2022-05-04T20:33:55.922617Z","shell.execute_reply":"2022-05-04T20:33:56.535929Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Now I will Appply the CNN model","metadata":{}},{"cell_type":"code","source":"import tensorflow as tf\nimport keras \nfrom tensorflow.keras.models import Sequential\nfrom tensorflow.keras.layers import Dense, Flatten, Dropout,Conv2D, MaxPooling2D,BatchNormalization","metadata":{"execution":{"iopub.status.busy":"2022-05-04T20:33:56.537841Z","iopub.execute_input":"2022-05-04T20:33:56.538702Z","iopub.status.idle":"2022-05-04T20:34:01.712911Z","shell.execute_reply.started":"2022-05-04T20:33:56.538662Z","shell.execute_reply":"2022-05-04T20:34:01.712164Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def my_model():\n        model=Sequential()\n        model.add(keras.Input(shape=(train_X.shape[1:])))\n        model.add(Conv2D(128,3,padding='same',activation='relu'))\n        model.add(BatchNormalization())\n        model.add(MaxPooling2D(2))\n        model.add(Conv2D(128,3,padding='valid',activation='relu'))\n        model.add(BatchNormalization())\n        model.add(MaxPooling2D(2))\n        model.add(Conv2D(64,3,padding='same',activation='relu'))\n        model.add(BatchNormalization())\n        model.add(MaxPooling2D(2))\n        model.add(Conv2D(64,3,padding='same',activation='relu',input_dim=(train_X.shape[1:])))\n        model.add(BatchNormalization())\n        model.add(MaxPooling2D(2))\n        model.add(Conv2D(32,3,padding='same',activation='relu'))\n        model.add(BatchNormalization())\n        model.add(MaxPooling2D(2))\n        model.add(Conv2D(16,3,padding='same',activation='relu'))\n        model.add(MaxPooling2D(2))\n        model.add(Conv2D(16,3,padding='same',activation='relu'))\n        model.add(BatchNormalization())\n        model.add(Flatten())\n        model.add(Dropout(0.25))\n        model.add(Dense(100,activation='relu'))\n        model.add(Dense(1,activation='sigmoid'))\n        return model","metadata":{"execution":{"iopub.status.busy":"2022-05-04T20:34:01.714058Z","iopub.execute_input":"2022-05-04T20:34:01.714305Z","iopub.status.idle":"2022-05-04T20:34:01.727833Z","shell.execute_reply.started":"2022-05-04T20:34:01.714273Z","shell.execute_reply":"2022-05-04T20:34:01.727166Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model=my_model()","metadata":{"execution":{"iopub.status.busy":"2022-05-04T20:34:01.730337Z","iopub.execute_input":"2022-05-04T20:34:01.730728Z","iopub.status.idle":"2022-05-04T20:34:04.263438Z","shell.execute_reply.started":"2022-05-04T20:34:01.730586Z","shell.execute_reply":"2022-05-04T20:34:04.261573Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.summary()","metadata":{"execution":{"iopub.status.busy":"2022-05-04T20:34:04.266455Z","iopub.execute_input":"2022-05-04T20:34:04.266652Z","iopub.status.idle":"2022-05-04T20:34:04.282303Z","shell.execute_reply.started":"2022-05-04T20:34:04.266629Z","shell.execute_reply":"2022-05-04T20:34:04.281608Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.compile(optimizer=\"adam\",loss=\"binary_crossentropy\",metrics=['accuracy'])\nmodel.fit(train_X,train_y,epochs=15,batch_size=32,validation_split=0.2,verbose=2)","metadata":{"execution":{"iopub.status.busy":"2022-05-04T20:34:04.283469Z","iopub.execute_input":"2022-05-04T20:34:04.284306Z","iopub.status.idle":"2022-05-04T20:37:16.950337Z","shell.execute_reply.started":"2022-05-04T20:34:04.284267Z","shell.execute_reply":"2022-05-04T20:37:16.949476Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# This code cell is to inform wether that the images in the test folder are ordered from 1-12500 or not\nmain_dir = \"/kaggle/working/\"\ntest_dir = \"test\"\npath=os.path.join(main_dir,test_dir)\nfor i in os.listdir(path):\n    category=i.split(\".\")[0]\n    print(category)\n    break\n#Which is not so I need to reorder the images from 1-12500","metadata":{"execution":{"iopub.status.busy":"2022-05-04T20:37:16.951741Z","iopub.execute_input":"2022-05-04T20:37:16.952417Z","iopub.status.idle":"2022-05-04T20:37:16.968884Z","shell.execute_reply.started":"2022-05-04T20:37:16.952369Z","shell.execute_reply":"2022-05-04T20:37:16.968118Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_X=[]\ntest_y=[]\nmain_dir = \"/kaggle/working/\"\ntest_dir = \"test\"\npath=os.path.join(main_dir,test_dir)\nfor i in os.listdir(path):\n    category=i.split(\".\")[0]\n    img = cv2.imread(os.path.join(path,i),0)\n    new_img=cv2.resize(img,dsize=(100,100))\n    test_X.append(new_img)\n    test_y.append(category)","metadata":{"execution":{"iopub.status.busy":"2022-05-04T20:37:16.970089Z","iopub.execute_input":"2022-05-04T20:37:16.970575Z","iopub.status.idle":"2022-05-04T20:37:28.456047Z","shell.execute_reply.started":"2022-05-04T20:37:16.970532Z","shell.execute_reply":"2022-05-04T20:37:28.455250Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_y=list(map(int,test_y))\ntest_X=np.array(test_X).reshape(-1,100,100,1)\ntest_y=np.array(test_y)","metadata":{"execution":{"iopub.status.busy":"2022-05-04T20:37:28.457408Z","iopub.execute_input":"2022-05-04T20:37:28.457669Z","iopub.status.idle":"2022-05-04T20:37:28.515122Z","shell.execute_reply.started":"2022-05-04T20:37:28.457634Z","shell.execute_reply":"2022-05-04T20:37:28.514377Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sorted_order= test_y.argsort()\ntest_y = test_y[sorted_order[::]]\ntest_X = test_X[sorted_order[::]]","metadata":{"execution":{"iopub.status.busy":"2022-05-04T20:37:28.516532Z","iopub.execute_input":"2022-05-04T20:37:28.516789Z","iopub.status.idle":"2022-05-04T20:37:28.561622Z","shell.execute_reply.started":"2022-05-04T20:37:28.516755Z","shell.execute_reply":"2022-05-04T20:37:28.560856Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"predictions=model.predict(test_X)","metadata":{"execution":{"iopub.status.busy":"2022-05-04T20:37:28.562922Z","iopub.execute_input":"2022-05-04T20:37:28.563451Z","iopub.status.idle":"2022-05-04T20:37:31.211621Z","shell.execute_reply.started":"2022-05-04T20:37:28.563415Z","shell.execute_reply":"2022-05-04T20:37:31.210839Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"predictions","metadata":{"execution":{"iopub.status.busy":"2022-05-04T20:37:31.213058Z","iopub.execute_input":"2022-05-04T20:37:31.213294Z","iopub.status.idle":"2022-05-04T20:37:31.218934Z","shell.execute_reply.started":"2022-05-04T20:37:31.213260Z","shell.execute_reply":"2022-05-04T20:37:31.218277Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"my_submission = pd.read_csv('/kaggle/input/dogs-vs-cats-redux-kernels-edition/sample_submission.csv')","metadata":{"execution":{"iopub.status.busy":"2022-05-04T20:37:31.220287Z","iopub.execute_input":"2022-05-04T20:37:31.220765Z","iopub.status.idle":"2022-05-04T20:37:31.239253Z","shell.execute_reply.started":"2022-05-04T20:37:31.220730Z","shell.execute_reply":"2022-05-04T20:37:31.238643Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"my_submission['label'] = predictions\n","metadata":{"execution":{"iopub.status.busy":"2022-05-04T20:37:31.241449Z","iopub.execute_input":"2022-05-04T20:37:31.241683Z","iopub.status.idle":"2022-05-04T20:37:31.250091Z","shell.execute_reply.started":"2022-05-04T20:37:31.241649Z","shell.execute_reply":"2022-05-04T20:37:31.249271Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"my_submission['label'] = my_submission['label'].map(lambda x: 1 if x >= 0.5 else 0 )","metadata":{"execution":{"iopub.status.busy":"2022-05-04T20:37:31.252206Z","iopub.execute_input":"2022-05-04T20:37:31.253156Z","iopub.status.idle":"2022-05-04T20:37:31.265884Z","shell.execute_reply.started":"2022-05-04T20:37:31.253121Z","shell.execute_reply":"2022-05-04T20:37:31.265245Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"my_submission.tail()\n","metadata":{"execution":{"iopub.status.busy":"2022-05-04T20:37:31.266744Z","iopub.execute_input":"2022-05-04T20:37:31.267415Z","iopub.status.idle":"2022-05-04T20:37:31.277018Z","shell.execute_reply.started":"2022-05-04T20:37:31.267380Z","shell.execute_reply":"2022-05-04T20:37:31.276355Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"my_submission.to_csv('my_submission.csv', index=False)\n","metadata":{"execution":{"iopub.status.busy":"2022-05-04T20:37:31.278458Z","iopub.execute_input":"2022-05-04T20:37:31.278728Z","iopub.status.idle":"2022-05-04T20:37:31.301656Z","shell.execute_reply.started":"2022-05-04T20:37:31.278697Z","shell.execute_reply":"2022-05-04T20:37:31.301022Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"my_submission","metadata":{"execution":{"iopub.status.busy":"2022-05-04T20:37:31.302854Z","iopub.execute_input":"2022-05-04T20:37:31.303091Z","iopub.status.idle":"2022-05-04T20:37:31.312419Z","shell.execute_reply.started":"2022-05-04T20:37:31.303059Z","shell.execute_reply":"2022-05-04T20:37:31.311602Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}