{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.12","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":30559,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import tensorflow as tf\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport pandas as pd\nfrom tensorflow import keras\nfrom keras.datasets import mnist\nfrom keras.models import Sequential\nfrom keras import layers\nfrom sklearn.model_selection import train_test_split","metadata":{"scrolled":true,"execution":{"iopub.status.busy":"2023-11-02T07:08:05.658491Z","iopub.execute_input":"2023-11-02T07:08:05.658806Z","iopub.status.idle":"2023-11-02T07:08:15.574405Z","shell.execute_reply.started":"2023-11-02T07:08:05.658781Z","shell.execute_reply":"2023-11-02T07:08:15.573445Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Load train image from zip file\n!unzip /kaggle/input/dogs-vs-cats/train.zip","metadata":{"scrolled":true,"execution":{"iopub.status.busy":"2023-11-02T07:08:15.576374Z","iopub.execute_input":"2023-11-02T07:08:15.576938Z","iopub.status.idle":"2023-11-02T07:08:26.765394Z","shell.execute_reply.started":"2023-11-02T07:08:15.576907Z","shell.execute_reply":"2023-11-02T07:08:26.764248Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import os\nimport cv2\nimages = np.zeros((25000, 112, 112, 3))\nlabels = np.zeros(25000)\nfolder = '/kaggle/working/train'\ni = 1\nprint('Importing images...')\nfor filename in os.listdir(folder):\n    img = cv2.imread(os.path.join(folder, filename))\n    if img is not None:\n        images[i-1] = cv2.resize(img, (112, 112))/255.0\n        print(f'Image {i}/25000 imported successfully!', end='\\r')\n        if 'cat' in filename:\n            labels[i-1] = 1\n        else:\n            labels[i-1] = 0\n        i+=1","metadata":{"execution":{"iopub.status.busy":"2023-11-02T07:08:26.767005Z","iopub.execute_input":"2023-11-02T07:08:26.767924Z","iopub.status.idle":"2023-11-02T07:09:27.890247Z","shell.execute_reply.started":"2023-11-02T07:08:26.767883Z","shell.execute_reply":"2023-11-02T07:09:27.889135Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Combine train_x and train_y into pairs\ncombined_data = list(zip(images, labels))\nimages = None\nlabels = None\n# Shuffle the combined data\nnp.random.shuffle(combined_data)\n\n# Separate the shuffled data back into train_x and train_y\ntrain_images, train_labels = zip(*combined_data)\ntrain_images = np.array(train_images)\ntrain_labels = np.array(train_labels)\ncombined_data = None","metadata":{"execution":{"iopub.status.busy":"2023-11-02T07:09:27.893668Z","iopub.execute_input":"2023-11-02T07:09:27.89412Z","iopub.status.idle":"2023-11-02T07:09:30.596528Z","shell.execute_reply.started":"2023-11-02T07:09:27.894087Z","shell.execute_reply":"2023-11-02T07:09:30.595685Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Data visualization\nclass_names = ['dog', 'cat']\nplt.figure(figsize=(10,10))\nfor i in range(25):\n    plt.subplot(5,5,i+1)\n    plt.xticks([])\n    plt.yticks([])\n    plt.grid(False)\n    plt.imshow(train_images[i], cmap=plt.cm.binary)\n    plt.xlabel(class_names[int(train_labels[i])])\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2023-11-02T07:09:30.597899Z","iopub.execute_input":"2023-11-02T07:09:30.598209Z","iopub.status.idle":"2023-11-02T07:09:32.356643Z","shell.execute_reply.started":"2023-11-02T07:09:30.598183Z","shell.execute_reply":"2023-11-02T07:09:32.35552Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Check training data shape & dimension\nprint(f'Train images shape: {train_images.shape}')\nprint(f'Train label length: {len(train_labels)}')","metadata":{"execution":{"iopub.status.busy":"2023-11-02T07:09:32.357953Z","iopub.execute_input":"2023-11-02T07:09:32.358332Z","iopub.status.idle":"2023-11-02T07:09:32.364387Z","shell.execute_reply.started":"2023-11-02T07:09:32.358304Z","shell.execute_reply":"2023-11-02T07:09:32.363219Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Model implementation\nnp.random.seed(0)\ntf.random.set_seed(0)\ninput = keras.Input(shape=(112, 112, 3))\ninitializer = tf.keras.initializers.RandomNormal(mean=0., stddev=0.01, seed=0)\n# 1st layer(Conv)\nx = layers.Conv2D(filters=48, kernel_size=(7, 7),strides=3, activation='relu', kernel_initializer=initializer,\n                  use_bias=True, bias_initializer=keras.initializers.Zeros())(input)\n# layer(Max-Pool)\nx = layers.MaxPooling2D(pool_size=(2, 2), strides=(2, 2))(x)\n# layer(Batch-Norm)\nx = layers.BatchNormalization()(x)\n# 2nd layer(Conv)\nx = layers.Conv2D(filters=128, kernel_size=(5, 5),strides=1, activation='relu', kernel_initializer=initializer,\n                  use_bias=True, bias_initializer=keras.initializers.Ones(), padding='same')(x)\n# layer(Max-Pool)\nx = layers.MaxPooling2D(pool_size=(2, 2), strides=(2, 2))(x)\n# layer(Batch-Norm)\nx = layers.BatchNormalization()(x)\n# 3rd layer(Conv)\nx = layers.Conv2D(filters=256, kernel_size=(3, 3),strides=1, activation='relu', kernel_initializer=initializer,\n                  use_bias=True, bias_initializer=keras.initializers.Zeros(), padding='same')(x)\n# layer(Batch-Norm)\nx = layers.BatchNormalization()(x)\n# 4th layer(Conv)\nx = layers.Conv2D(filters=256, kernel_size=(3, 3),strides=1, activation='relu', kernel_initializer=initializer,\n                  use_bias=True, bias_initializer=keras.initializers.Ones(), padding='same')(x)\n# layer(Max-Pool)\nx = layers.MaxPooling2D(pool_size=(3, 3), strides=(2, 2))(x)\n# layer(Batch-Norm)\nx = layers.BatchNormalization()(x)\n# layer(Flatten)\nx = layers.Flatten()(x)\n# 6th layer(Fully-connected)\nx = layers.Dense(2048, activation='relu', use_bias=True, kernel_initializer=initializer, bias_initializer=keras.initializers.Zeros())(x)\n# layer(Dropout)\nx = layers.Dropout(0.5)(x)\n# 7th layer(Fully-connected)\nx = layers.Dense(1024, activation='relu', use_bias=True, kernel_initializer=initializer, bias_initializer=keras.initializers.Zeros())(x)\n# layer(Dropout)\nx = layers.Dropout(0.5)(x)\n# 8th layer(Softmax)\noutput = layers.Dense(1, activation='sigmoid', kernel_initializer=initializer)(x)\n\nmodel = keras.Model(inputs=input, outputs=output, name=\"alexnet_model\")\nmodel.summary()","metadata":{"execution":{"iopub.status.busy":"2023-11-02T07:09:32.366042Z","iopub.execute_input":"2023-11-02T07:09:32.366381Z","iopub.status.idle":"2023-11-02T07:09:37.437178Z","shell.execute_reply.started":"2023-11-02T07:09:32.36635Z","shell.execute_reply":"2023-11-02T07:09:37.435911Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.compile(\n    loss=tf.keras.losses.BinaryCrossentropy(),\n    optimizer=keras.optimizers.Adam(learning_rate=0.0001),\n    metrics=keras.metrics.BinaryAccuracy()\n)\nmodel.fit(train_images, train_labels, batch_size=50, epochs=10, validation_split=0.2)","metadata":{"execution":{"iopub.status.busy":"2023-11-02T07:09:37.438805Z","iopub.execute_input":"2023-11-02T07:09:37.439095Z","iopub.status.idle":"2023-11-02T07:11:08.239578Z","shell.execute_reply.started":"2023-11-02T07:09:37.43907Z","shell.execute_reply":"2023-11-02T07:11:08.23853Z"},"trusted":true},"execution_count":null,"outputs":[]}]}