{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"nvidiaTeslaT4","dataSources":[{"sourceId":3362,"databundleVersionId":31148,"sourceType":"competition"}],"dockerImageVersionId":30646,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","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\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"}},{"cell_type":"code","source":"import numpy as np\nimport matplotlib.pyplot as plt\nimport tensorflow as tf\nimport os, shutil\nfrom tensorflow.keras.models import Sequential\nfrom tensorflow.keras.layers import Input, Dense, Conv2D, MaxPool2D, Flatten\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\nfrom tensorflow.keras.optimizers import Adam","metadata":{"execution":{"iopub.status.busy":"2024-02-26T06:50:39.401753Z","iopub.execute_input":"2024-02-26T06:50:39.402235Z","iopub.status.idle":"2024-02-26T06:50:54.201506Z","shell.execute_reply.started":"2024-02-26T06:50:39.402207Z","shell.execute_reply":"2024-02-26T06:50:54.200723Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import zipfile\nwith zipfile.ZipFile(\"/kaggle/input/dogs-vs-cats/train.zip\", 'r') as zip_ref:\n  zip_ref.extractall(\"/kaggle/working/\")\nwith zipfile.ZipFile(\"/kaggle/input/dogs-vs-cats/test1.zip\", 'r') as zip_ref:\n  zip_ref.extractall(\"/kaggle/working/\")","metadata":{"execution":{"iopub.status.busy":"2024-02-26T06:50:54.203245Z","iopub.execute_input":"2024-02-26T06:50:54.203793Z","iopub.status.idle":"2024-02-26T06:51:08.541655Z","shell.execute_reply.started":"2024-02-26T06:50:54.203765Z","shell.execute_reply":"2024-02-26T06:51:08.540643Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Define the existing directory\nexisting_directory = '/kaggle/working/train'\n\n# Create new directories 'cat' and 'dog' inside 'train' directory\ncat_directory = os.path.join(existing_directory, 'Cats')\ndog_directory = os.path.join(existing_directory, 'Dogs')\n\nos.makedirs(cat_directory, exist_ok=True)\nos.makedirs(dog_directory, exist_ok=True)\n\n# Get a list of files in the existing directory\nfiles = os.listdir(existing_directory)\n\n# Move files starting with 'cat' to 'cat' directory and files starting with 'dog' to 'dog' directory\nfor file in files:\n    if file.startswith('cat'):\n        shutil.move(os.path.join(existing_directory, file), cat_directory)\n    elif file.startswith('dog'):\n        shutil.move(os.path.join(existing_directory, file), dog_directory)\n\nprint(\"Files moved successfully.\")\n","metadata":{"execution":{"iopub.status.busy":"2024-02-26T06:51:08.542965Z","iopub.execute_input":"2024-02-26T06:51:08.543250Z","iopub.status.idle":"2024-02-26T06:51:09.814356Z","shell.execute_reply.started":"2024-02-26T06:51:08.543225Z","shell.execute_reply":"2024-02-26T06:51:09.813187Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Define the existing directory\nexisting_directory = '/kaggle/working/test1'\n\n# Create new directories 'cat' and 'dog' inside 'train' directory\ncat_directory = os.path.join(existing_directory, 'Cats')\ndog_directory = os.path.join(existing_directory, 'Dogs')\n\nos.makedirs(cat_directory, exist_ok=True)\nos.makedirs(dog_directory, exist_ok=True)\n\n# Get a list of files in the existing directory\nfiles = os.listdir(existing_directory)\n\n# Move files starting with 'cat' to 'cat' directory and files starting with 'dog' to 'dog' directory\nfor file in files:\n    if file.startswith('cat'):\n        shutil.move(os.path.join(existing_directory, file), cat_directory)\n    elif file.startswith('dog'):\n        shutil.move(os.path.join(existing_directory, file), dog_directory)\n\nprint(\"Files moved successfully.\")","metadata":{"execution":{"iopub.status.busy":"2024-02-26T06:51:24.395818Z","iopub.execute_input":"2024-02-26T06:51:24.396166Z","iopub.status.idle":"2024-02-26T06:51:24.416022Z","shell.execute_reply.started":"2024-02-26T06:51:24.396137Z","shell.execute_reply":"2024-02-26T06:51:24.415157Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"files = os.listdir(\"/kaggle/working/train/Cats\")\n\nfor idx in range(len(files)//5):\n    shutil.move(os.path.join(\"/kaggle/working/train/Cats\", files[idx]), \"/kaggle/working/test1/Cats\")\n\nfiles = os.listdir(\"/kaggle/working/train/Dogs\")\nfor idx in range(len(files)//5):\n    shutil.move(os.path.join(\"/kaggle/working/train/Dogs\", files[idx]), \"/kaggle/working/test1/Dogs\")\n\n    ","metadata":{"execution":{"iopub.status.busy":"2024-02-26T06:51:31.527079Z","iopub.execute_input":"2024-02-26T06:51:31.527540Z","iopub.status.idle":"2024-02-26T06:51:31.789598Z","shell.execute_reply.started":"2024-02-26T06:51:31.527508Z","shell.execute_reply":"2024-02-26T06:51:31.788527Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"trdata = ImageDataGenerator()\ntraindata = trdata.flow_from_directory(directory=\"/kaggle/working/train\",target_size=(224,224))\ntsdata = ImageDataGenerator()\ntestdata = tsdata.flow_from_directory(directory=\"/kaggle/working/test1\", target_size=(224,224))","metadata":{"execution":{"iopub.status.busy":"2024-02-25T12:15:41.127712Z","iopub.execute_input":"2024-02-25T12:15:41.128429Z","iopub.status.idle":"2024-02-25T12:15:41.881727Z","shell.execute_reply.started":"2024-02-25T12:15:41.128395Z","shell.execute_reply":"2024-02-25T12:15:41.880880Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Model","metadata":{}},{"cell_type":"code","source":"model = Sequential([\n    Conv2D(input_shape=(224, 224, 3), filters=64, kernel_size=(3,3), padding=\"same\", activation=\"relu\"),\n    Conv2D(filters=64, kernel_size=(3,3), padding=\"same\", activation=\"relu\"),\n    MaxPool2D(pool_size=(2,2), strides=(2,2)),\n    Conv2D(filters=128, kernel_size=(3,3), padding=\"same\", activation=\"relu\"),\n    Conv2D(filters=128, kernel_size=(3,3), padding=\"same\", activation=\"relu\"),\n    MaxPool2D(pool_size=(2,2), strides=(2,2)),\n    Conv2D(filters=256, kernel_size=(3,3), padding=\"same\", activation=\"relu\"),\n    Conv2D(filters=256, kernel_size=(3,3), padding=\"same\", activation=\"relu\"),\n    Conv2D(filters=256, kernel_size=(3,3), padding=\"same\", activation=\"relu\"),\n    MaxPool2D(pool_size=(2,2), strides=(2,2)),\n    Conv2D(filters=512, kernel_size=(3,3), padding=\"same\", activation=\"relu\"),\n    Conv2D(filters=512, kernel_size=(3,3), padding=\"same\", activation=\"relu\"),\n    Conv2D(filters=512, kernel_size=(3,3), padding=\"same\", activation=\"relu\"),\n    MaxPool2D(pool_size=(2,2), strides=(2,2)),\n    Conv2D(filters=512, kernel_size=(3,3), padding=\"same\", activation=\"relu\"),\n    Conv2D(filters=512, kernel_size=(3,3), padding=\"same\", activation=\"relu\"),\n    Conv2D(filters=512, kernel_size=(3,3), padding=\"same\", activation=\"relu\"),\n    MaxPool2D(pool_size=(2,2), strides=(2,2)),\n    Flatten(),\n    Dense(units=4096, activation=\"relu\"),\n    Dense(units=4096, activation=\"relu\"),\n    Dense(units=2, activation=\"softmax\")\n])","metadata":{"execution":{"iopub.status.busy":"2024-02-25T12:06:40.157502Z","iopub.execute_input":"2024-02-25T12:06:40.158098Z","iopub.status.idle":"2024-02-25T12:06:40.428508Z","shell.execute_reply.started":"2024-02-25T12:06:40.158068Z","shell.execute_reply":"2024-02-25T12:06:40.427757Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.compile(loss=tf.keras.losses.categorical_crossentropy, optimizer=Adam(3e-04), metrics=[\"accuracy\"])","metadata":{"execution":{"iopub.status.busy":"2024-02-25T12:08:51.630729Z","iopub.execute_input":"2024-02-25T12:08:51.631861Z","iopub.status.idle":"2024-02-25T12:08:51.655257Z","shell.execute_reply.started":"2024-02-25T12:08:51.631817Z","shell.execute_reply":"2024-02-25T12:08:51.654358Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.summary()","metadata":{"execution":{"iopub.status.busy":"2024-02-25T12:08:58.353962Z","iopub.execute_input":"2024-02-25T12:08:58.354648Z","iopub.status.idle":"2024-02-25T12:08:58.414971Z","shell.execute_reply.started":"2024-02-25T12:08:58.354616Z","shell.execute_reply":"2024-02-25T12:08:58.414075Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from tensorflow.keras.callbacks import ModelCheckpoint, EarlyStopping\n\n# Define the model checkpoint callback to save in the recommended format\ncheckpoint = ModelCheckpoint(\"vgg16_1\", monitor='val_accuracy', verbose=1, save_best_only=True, save_weights_only=False, mode='auto', period=1)\n\nearly = EarlyStopping(monitor='val_accuracy', min_delta=0, patience=20, verbose=1, mode='auto')\n\nhist = model.fit(x=traindata, validation_data=testdata, epochs=100, steps_per_epoch=100, validation_steps=10, callbacks=[checkpoint, early])","metadata":{"execution":{"iopub.status.busy":"2024-02-25T12:20:09.250883Z","iopub.execute_input":"2024-02-25T12:20:09.251705Z"},"trusted":true},"execution_count":null,"outputs":[]}]}