{"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":"none","dataSources":[{"sourceId":3362,"databundleVersionId":31148,"sourceType":"competition"}],"dockerImageVersionId":30746,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import numpy as np \nimport pandas as pd\n\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2024-09-01T13:29:13.196889Z","iopub.execute_input":"2024-09-01T13:29:13.197905Z","iopub.status.idle":"2024-09-01T13:29:14.372674Z","shell.execute_reply.started":"2024-09-01T13:29:13.197862Z","shell.execute_reply":"2024-09-01T13:29:14.371418Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!unzip -qq /kaggle/input/dogs-vs-cats/train.zip","metadata":{"execution":{"iopub.status.busy":"2024-09-01T13:29:14.374740Z","iopub.execute_input":"2024-09-01T13:29:14.375335Z","iopub.status.idle":"2024-09-01T13:29:25.755103Z","shell.execute_reply.started":"2024-09-01T13:29:14.375288Z","shell.execute_reply":"2024-09-01T13:29:25.753520Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import os, shutil, pathlib\n\noriginal_dir = pathlib.Path(\"/kaggle/working/train\")\nnew_base_dir = pathlib.Path(\"/kaggle/working/cats_vs_dogs_small\")\n\ndef make_subset(subset_name, start_index, end_index):\n    for category in (\"cat\", \"dog\"):\n        dir = new_base_dir / subset_name / category\n        print(dir)\n        if not os.path.exists(dir):\n            os.makedirs(dir)\n        fnames = [f\"{category}.{i}.jpg\" for i in range(start_index, end_index)]\n        for fname in fnames:\n            shutil.copyfile(src=original_dir / fname,\n                            dst=dir / fname)\n\nmake_subset(\"train\", start_index=0, end_index=1000)\nmake_subset(\"validation\", start_index=1000, end_index=1500)\nmake_subset(\"test\", start_index=1500, end_index=2500)","metadata":{"execution":{"iopub.status.busy":"2024-09-01T13:29:25.756938Z","iopub.execute_input":"2024-09-01T13:29:25.757362Z","iopub.status.idle":"2024-09-01T13:29:26.567241Z","shell.execute_reply.started":"2024-09-01T13:29:25.757326Z","shell.execute_reply":"2024-09-01T13:29:26.565950Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from tensorflow import keras\nfrom tensorflow.keras import layers\n\ninputs = keras.Input(shape=(180, 180, 3))\nx = layers.Rescaling(1./255)(inputs)\nx = layers.Conv2D(filters=32, kernel_size=3, activation=\"relu\")(x)\nx = layers.MaxPooling2D(pool_size=2)(x)\nx = layers.Conv2D(filters=64, kernel_size=3, activation=\"relu\")(x)\nx = layers.MaxPooling2D(pool_size=2)(x)\nx = layers.Conv2D(filters=128, kernel_size=3, activation=\"relu\")(x)\nx = layers.MaxPooling2D(pool_size=2)(x)\nx = layers.Conv2D(filters=256, kernel_size=3, activation=\"relu\")(x)\nx = layers.MaxPooling2D(pool_size=2)(x)\nx = layers.Conv2D(filters=256, kernel_size=3, activation=\"relu\")(x)\nx = layers.Flatten()(x)\noutputs = layers.Dense(1, activation=\"sigmoid\")(x)\nmodel = keras.Model(inputs=inputs, outputs=outputs)","metadata":{"execution":{"iopub.status.busy":"2024-09-01T13:29:26.569727Z","iopub.execute_input":"2024-09-01T13:29:26.570086Z","iopub.status.idle":"2024-09-01T13:29:41.284391Z","shell.execute_reply.started":"2024-09-01T13:29:26.570053Z","shell.execute_reply":"2024-09-01T13:29:41.283045Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.compile(loss=\"binary_crossentropy\",\n              optimizer=\"rmsprop\",\n              metrics=[\"accuracy\"])","metadata":{"execution":{"iopub.status.busy":"2024-09-01T13:31:31.856101Z","iopub.execute_input":"2024-09-01T13:31:31.856989Z","iopub.status.idle":"2024-09-01T13:31:31.868679Z","shell.execute_reply.started":"2024-09-01T13:31:31.856946Z","shell.execute_reply":"2024-09-01T13:31:31.867472Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from tensorflow.keras.utils import image_dataset_from_directory\n\ntrain_dataset = image_dataset_from_directory(\n    new_base_dir / \"train\",\n    image_size=(180, 180),\n    batch_size=32)\nvalidation_dataset = image_dataset_from_directory(\n    new_base_dir / \"validation\",\n    image_size=(180, 180),\n    batch_size=32)\ntest_dataset = image_dataset_from_directory(\n    new_base_dir / \"test\",\n    image_size=(180, 180),\n    batch_size=32)","metadata":{"execution":{"iopub.status.busy":"2024-09-01T13:31:33.401738Z","iopub.execute_input":"2024-09-01T13:31:33.402476Z","iopub.status.idle":"2024-09-01T13:31:33.881992Z","shell.execute_reply.started":"2024-09-01T13:31:33.402406Z","shell.execute_reply":"2024-09-01T13:31:33.880955Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"callbacks = [\n    keras.callbacks.ModelCheckpoint(\n        filepath=\"convnet_from_scratch.keras\",\n        save_best_only=True,\n        monitor=\"val_loss\")\n]\nhistory = model.fit(\n    train_dataset,\n    epochs=3,\n    validation_data=validation_dataset,\n    callbacks=callbacks)","metadata":{"execution":{"iopub.status.busy":"2024-09-01T13:31:36.403389Z","iopub.execute_input":"2024-09-01T13:31:36.403794Z","iopub.status.idle":"2024-09-01T13:37:53.956099Z","shell.execute_reply.started":"2024-09-01T13:31:36.403762Z","shell.execute_reply":"2024-09-01T13:37:53.954831Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}