{"cells":[{"metadata":{},"cell_type":"markdown","source":"## Dataset preparation"},{"metadata":{},"cell_type":"markdown","source":"### 1. Downloading the dataset\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"from shutil import unpack_archive as ua\nua(\"/kaggle/input/dogs-vs-cats/test1.zip\", \"/kaggle/output/working\")\nua(\"/kaggle/input/dogs-vs-cats/train.zip\", \"/kaggle/output/working\")","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### 2. Making appropriate folders.\nNote: The training dataset is kept in **/kaggle/working/train** directory."},{"metadata":{"trusted":true},"cell_type":"code","source":"mkdir train","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"cd /kaggle/working/train","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"mkdir cat","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"mkdir dog","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### 3. Copying the image from the used dataset in appropriate folders. \nPlease note that each class is supposed to have separate folders in the **/kaggle/working/train** directory"},{"metadata":{"trusted":true},"cell_type":"code","source":"from shutil import copy as cp\nimport os\ndest = \"/kaggle/working/train\"\nfor name in os.listdir(\"/kaggle/output/working/train\"):\n    d = os.path.join(dest, name.split(\".\")[0])\n    src = os.path.join(\"/kaggle/output/working/train\",name)\n    cp(src, d)\n    #print(src, d)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Model preparation\n"},{"metadata":{},"cell_type":"markdown","source":"### 1. Hyperparameters and directories\nNote: Change the no. of classes according to your task and dataset used."},{"metadata":{"trusted":true},"cell_type":"code","source":"# Dimesion of images to be use. Can choose anything as a different dimenion will be resized to this.\nht = 180\nwth = 180\n\n# Important hyperparameters\nbatch_size = 32\nnum_classes = 2\nno_of_epochs = 3\nvalidation_split_coeff = 0.2\n\n# The directory for training dataset to be specified in data pipeline\ndata_dir = \"/kaggle/working/train\"","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### 2. Data pipeline\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"import tensorflow as tf\n\ntrain_ds = tf.keras.preprocessing.image_dataset_from_directory(\n  data_dir,\n  validation_split=validation_split_coeff,\n  subset=\"training\",\n  seed=123,\n  image_size=(ht, wth),\n  batch_size=batch_size)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"val_ds = tf.keras.preprocessing.image_dataset_from_directory(\n  data_dir,\n  validation_split=validation_split_coeff,\n  subset=\"validation\",\n  seed=123,\n  image_size=(ht, wth),\n  batch_size=batch_size)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### 3. Model and its training"},{"metadata":{"trusted":true},"cell_type":"code","source":"from tensorflow.keras import layers\n\nmodel = tf.keras.Sequential([\n  layers.experimental.preprocessing.Rescaling(1./255),\n  layers.Conv2D(32, 3, activation='relu'),\n  layers.MaxPooling2D(),\n  layers.Conv2D(32, 3, activation='relu'),\n  layers.MaxPooling2D(),\n  layers.Conv2D(32, 3, activation='relu'),\n  layers.MaxPooling2D(),\n  layers.Flatten(),\n  layers.Dense(128, activation='relu'),\n  layers.Dense(num_classes)\n])\n\nmodel.compile(\n  optimizer='adam',\n  loss=tf.losses.SparseCategoricalCrossentropy(from_logits=True),\n  metrics=['accuracy'])\n\nmodel.fit(\n  train_ds,\n  validation_data=val_ds,\n  epochs=no_of_epochs\n)","execution_count":null,"outputs":[]}],"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":4,"nbformat_minor":4}