{"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":7327,"databundleVersionId":861871,"sourceType":"competition"}],"dockerImageVersionId":30747,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nimport os\nimport cv2\nfrom sklearn.model_selection import train_test_split\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nimport tensorflow as tf","metadata":{"execution":{"iopub.status.busy":"2025-03-17T08:57:20.084645Z","iopub.execute_input":"2025-03-17T08:57:20.084937Z","iopub.status.idle":"2025-03-17T08:57:33.773574Z","shell.execute_reply.started":"2025-03-17T08:57:20.084907Z","shell.execute_reply":"2025-03-17T08:57:33.772867Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_dir = '/kaggle/input/dog-breed-identification/train/'\ntest_dir = '/kaggle/input/dog-breed-identification/test/'\nlabels_file = '/kaggle/input/dog-breed-identification/labels.csv'\n\nlabels = pd.read_csv(labels_file)\nprint(labels.head())\n","metadata":{"execution":{"iopub.status.busy":"2025-03-17T08:57:33.774595Z","iopub.execute_input":"2025-03-17T08:57:33.775224Z","iopub.status.idle":"2025-03-17T08:57:33.811452Z","shell.execute_reply.started":"2025-03-17T08:57:33.775189Z","shell.execute_reply":"2025-03-17T08:57:33.810648Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from os.path import join\n\nfor dirname, _, filenames in os.walk(train_dir):\n    for filename in filenames:\n        os.path.join(dirname, filename)\n","metadata":{"execution":{"iopub.status.busy":"2025-03-17T08:57:33.813051Z","iopub.execute_input":"2025-03-17T08:57:33.813290Z","iopub.status.idle":"2025-03-17T08:57:39.895210Z","shell.execute_reply.started":"2025-03-17T08:57:33.813270Z","shell.execute_reply":"2025-03-17T08:57:39.894531Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_data = labels.assign(img_path = lambda x : train_dir + x['id'] + '.jpg')\ntrain_data.head()","metadata":{"execution":{"iopub.status.busy":"2025-03-17T08:57:39.896070Z","iopub.execute_input":"2025-03-17T08:57:39.896296Z","iopub.status.idle":"2025-03-17T08:57:39.911175Z","shell.execute_reply.started":"2025-03-17T08:57:39.896278Z","shell.execute_reply":"2025-03-17T08:57:39.910449Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"img=cv2.imread('/kaggle/input/dog-breed-identification/test/000621fb3cbb32d8935728e48679680e.jpg')\nimg=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)","metadata":{"execution":{"iopub.status.busy":"2025-03-17T08:57:39.912122Z","iopub.execute_input":"2025-03-17T08:57:39.912420Z","iopub.status.idle":"2025-03-17T08:57:39.952153Z","shell.execute_reply.started":"2025-03-17T08:57:39.912392Z","shell.execute_reply":"2025-03-17T08:57:39.951367Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from keras.preprocessing.image import load_img, img_to_array\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\n# from keras.preprocessing.image import ImageDataGenerator\n# from tensorflow.keras.preprocessing.image import ImageDataGenerator\nH=128\nW=128\nC=3\n\nX = np.array([img_to_array(load_img(img,target_size = (H,W))) for img in train_data['img_path'].values.tolist()])\nprint(X.shape)\nY = pd.get_dummies(train_data['breed'])\nprint(Y.shape)","metadata":{"execution":{"iopub.status.busy":"2025-03-17T08:57:39.953072Z","iopub.execute_input":"2025-03-17T08:57:39.953317Z","iopub.status.idle":"2025-03-17T08:58:22.291849Z","shell.execute_reply.started":"2025-03-17T08:57:39.953292Z","shell.execute_reply":"2025-03-17T08:58:22.290915Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from sklearn.model_selection import train_test_split\nX_train,X_test,Y_train,Y_test  = train_test_split(X,Y,test_size = 0.25)\nprint(X_train.shape,Y_train.shape)\nprint(X_test.shape,Y_test.shape)","metadata":{"execution":{"iopub.status.busy":"2025-03-17T08:58:22.293155Z","iopub.execute_input":"2025-03-17T08:58:22.293751Z","iopub.status.idle":"2025-03-17T08:58:22.816636Z","shell.execute_reply.started":"2025-03-17T08:58:22.293713Z","shell.execute_reply":"2025-03-17T08:58:22.815829Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from tensorflow import keras\nfrom keras.layers import LeakyReLU\nfrom keras.models import Sequential\nfrom keras.layers import Dense,Conv2D,MaxPool2D,Dropout,Flatten,Activation","metadata":{"execution":{"iopub.status.busy":"2025-03-17T08:58:22.817838Z","iopub.execute_input":"2025-03-17T08:58:22.818441Z","iopub.status.idle":"2025-03-17T08:58:22.824350Z","shell.execute_reply.started":"2025-03-17T08:58:22.818407Z","shell.execute_reply":"2025-03-17T08:58:22.823517Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"model=Sequential()\n\nmodel.add(Conv2D(32,(3,3),input_shape=(H,W,C)))\nmodel.add(LeakyReLU(alpha=0.01))\n# model.add(Activation('relu'))\n\nmodel.add(MaxPool2D((2,2)))\n\nmodel.add(Conv2D(64,(3,3)))\nmodel.add(LeakyReLU(alpha=0.01))\n# model.add(Activation('relu'))\n\nmodel.add(MaxPool2D((2,2)))\n\nmodel.add(Conv2D(128,(3,3)))\nmodel.add(LeakyReLU(alpha=0.01))\n# model.add(Activation('relu'))\n\nmodel.add(MaxPool2D((2,2)))\n\nmodel.add(Conv2D(128,(3,3)))\nmodel.add(LeakyReLU(alpha=0.01))\n# model.add(Activation('relu'))\n\nmodel.add(MaxPool2D((2,2)))\n\nmodel.add(Flatten())\n\nmodel.add(Dropout(0.5))\n\nmodel.add(Dense(512))\nmodel.add(LeakyReLU(alpha=0.01))\n# model.add(Activation('relu'))\n\nmodel.add(Dense(Y.shape[1]))\nmodel.add(Activation('softmax'))\n\nmodel.summary()","metadata":{"execution":{"iopub.status.busy":"2025-03-17T08:58:22.826761Z","iopub.execute_input":"2025-03-17T08:58:22.827039Z","iopub.status.idle":"2025-03-17T08:58:23.887314Z","shell.execute_reply.started":"2025-03-17T08:58:22.827019Z","shell.execute_reply":"2025-03-17T08:58:23.886506Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"batch=32","metadata":{"execution":{"iopub.status.busy":"2025-03-17T08:58:23.888187Z","iopub.execute_input":"2025-03-17T08:58:23.888402Z","iopub.status.idle":"2025-03-17T08:58:23.891965Z","shell.execute_reply.started":"2025-03-17T08:58:23.888383Z","shell.execute_reply":"2025-03-17T08:58:23.891244Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"model.compile(\n      optimizer='adam',\n      loss='categorical_crossentropy',\n      metrics=['accuracy'])","metadata":{"execution":{"iopub.status.busy":"2025-03-17T08:58:23.892975Z","iopub.execute_input":"2025-03-17T08:58:23.893250Z","iopub.status.idle":"2025-03-17T08:58:23.909885Z","shell.execute_reply.started":"2025-03-17T08:58:23.893221Z","shell.execute_reply":"2025-03-17T08:58:23.909137Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"trained_model=model.fit(X_train,Y_train,\n         epochs=20,\n         batch_size=batch,\n         steps_per_epoch=X_train.shape[0]//batch,\n         validation_steps=X_test.shape[0]//batch,\n         validation_data=(X_test,Y_test),\n         verbose=2)","metadata":{"execution":{"iopub.status.busy":"2025-03-17T08:58:23.910856Z","iopub.execute_input":"2025-03-17T08:58:23.911158Z","iopub.status.idle":"2025-03-17T08:59:27.780328Z","shell.execute_reply.started":"2025-03-17T08:58:23.911130Z","shell.execute_reply":"2025-03-17T08:59:27.779631Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"test_datagen = ImageDataGenerator()\n\ntest_set = test_datagen.flow_from_directory(\n    '/kaggle/input/dog-breed-identification',\n    target_size = (128,128),\n    classes=['test']\n)\ny_pred = model.predict(test_set)","metadata":{"execution":{"iopub.status.busy":"2025-03-17T08:59:27.781507Z","iopub.execute_input":"2025-03-17T08:59:27.781761Z","iopub.status.idle":"2025-03-17T09:00:22.877045Z","shell.execute_reply.started":"2025-03-17T08:59:27.781740Z","shell.execute_reply":"2025-03-17T09:00:22.876212Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import re\nfile_list = test_set.filenames\nid_list = []\nfor name in file_list:\n    m = re.sub('test/', '', name)\n    m = re.sub('.jpg', '', m)\n    id_list.append(m)\n","metadata":{"execution":{"iopub.status.busy":"2025-03-17T09:00:22.878514Z","iopub.execute_input":"2025-03-17T09:00:22.879118Z","iopub.status.idle":"2025-03-17T09:00:22.906467Z","shell.execute_reply.started":"2025-03-17T09:00:22.879084Z","shell.execute_reply":"2025-03-17T09:00:22.905625Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_datagen = ImageDataGenerator()\n\ntrain_set = train_datagen.flow_from_directory(\n    '/kaggle/input/dog-breed-identification',\n    target_size = (128,128),\n    classes=['train']\n)\ny_pred_train = model.predict(train_set)","metadata":{"execution":{"iopub.status.busy":"2025-03-17T09:00:22.907557Z","iopub.execute_input":"2025-03-17T09:00:22.908087Z","iopub.status.idle":"2025-03-17T09:00:50.841333Z","shell.execute_reply.started":"2025-03-17T09:00:22.908056Z","shell.execute_reply":"2025-03-17T09:00:50.840418Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from sklearn.metrics import log_loss\nlog_loss(Y, y_pred_train)","metadata":{"execution":{"iopub.status.busy":"2025-03-17T09:00:50.848889Z","iopub.execute_input":"2025-03-17T09:00:50.849232Z","iopub.status.idle":"2025-03-17T09:00:50.963172Z","shell.execute_reply.started":"2025-03-17T09:00:50.849210Z","shell.execute_reply":"2025-03-17T09:00:50.962358Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"submission = pd.read_csv('/kaggle/input/dog-breed-identification/sample_submission.csv')\nsubmission.head()\nsubmission['id'] = id_list\nsubmission.iloc[:,1:] =y_pred\nsubmission.head()\n\ndf = pd.DataFrame(submission)\ndf = submission.set_index('id')\ndf.to_csv('submission.csv')\n# print(df)","metadata":{"execution":{"iopub.status.busy":"2025-03-17T09:00:50.964150Z","iopub.execute_input":"2025-03-17T09:00:50.964425Z","iopub.status.idle":"2025-03-17T09:00:53.170472Z","shell.execute_reply.started":"2025-03-17T09:00:50.964403Z","shell.execute_reply":"2025-03-17T09:00:53.169806Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"print(df)","metadata":{"execution":{"iopub.status.busy":"2025-03-17T09:00:53.171505Z","iopub.execute_input":"2025-03-17T09:00:53.171822Z","iopub.status.idle":"2025-03-17T09:00:53.188852Z","shell.execute_reply.started":"2025-03-17T09:00:53.171790Z","shell.execute_reply":"2025-03-17T09:00:53.188041Z"},"trusted":true},"outputs":[],"execution_count":null}]}