{"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_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nimport requests\nfrom bs4 import BeautifulSoup\nimport lxml\nimport urllib\nimport sys\nimport seaborn as sns\nfrom PIL import Image\nimport cv2\nimport csv\nimport multiprocessing\nimport matplotlib.pyplot as plt\nimport os\nimport json","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2023-02-25T20:18:57.063433Z","iopub.execute_input":"2023-02-25T20:18:57.064203Z","iopub.status.idle":"2023-02-25T20:18:58.739914Z","shell.execute_reply.started":"2023-02-25T20:18:57.064095Z","shell.execute_reply":"2023-02-25T20:18:58.738766Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# EDA Train & Idho","metadata":{}},{"cell_type":"code","source":"train_csv = pd.read_csv('/kaggle/input/iwildcam-2019-fgvc6/train.csv')\ntrain_csv.describe()","metadata":{"execution":{"iopub.status.busy":"2023-02-25T20:18:58.743012Z","iopub.execute_input":"2023-02-25T20:18:58.744197Z","iopub.status.idle":"2023-02-25T20:19:00.333213Z","shell.execute_reply.started":"2023-02-25T20:18:58.744126Z","shell.execute_reply":"2023-02-25T20:19:00.331683Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print('The shape is', train_csv.shape)\nprint('The number of nan is:')\ntrain_csv.isna().sum() # Show the number of NaN","metadata":{"execution":{"iopub.status.busy":"2023-02-25T20:19:00.335234Z","iopub.execute_input":"2023-02-25T20:19:00.336089Z","iopub.status.idle":"2023-02-25T20:19:00.404924Z","shell.execute_reply.started":"2023-02-25T20:19:00.336031Z","shell.execute_reply":"2023-02-25T20:19:00.403314Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_csv.info()","metadata":{"execution":{"iopub.status.busy":"2023-02-25T20:19:00.408632Z","iopub.execute_input":"2023-02-25T20:19:00.409881Z","iopub.status.idle":"2023-02-25T20:19:00.487415Z","shell.execute_reply.started":"2023-02-25T20:19:00.409801Z","shell.execute_reply":"2023-02-25T20:19:00.486066Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"label_df_train = train_csv[['location','category_id']].groupby(['category_id']).count().reset_index()\nlabel_df_train.columns = ['category_id','count']\nlabel_df_train = label_df_train.sort_values(by=['count'], ascending=False)\nlabel_df_train","metadata":{"execution":{"iopub.status.busy":"2023-02-25T20:19:00.489306Z","iopub.execute_input":"2023-02-25T20:19:00.489730Z","iopub.status.idle":"2023-02-25T20:19:00.515972Z","shell.execute_reply.started":"2023-02-25T20:19:00.489691Z","shell.execute_reply":"2023-02-25T20:19:00.514671Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Show the low-level type description of the frame\ntrain_csv.head()\ntrain_csv.corr().head()\nplt.figure(figsize=(15,8))\nsns.heatmap(train_csv.corr(),annot=True,cmap='Greens')\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2023-02-25T20:19:00.518094Z","iopub.execute_input":"2023-02-25T20:19:00.518497Z","iopub.status.idle":"2023-02-25T20:19:01.068053Z","shell.execute_reply.started":"2023-02-25T20:19:00.518462Z","shell.execute_reply":"2023-02-25T20:19:01.066662Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sns.barplot(x=label_df_train['category_id'], y=label_df_train['count'])\nplt.title('Distribution by classes')","metadata":{"execution":{"iopub.status.busy":"2023-02-25T20:19:01.069927Z","iopub.execute_input":"2023-02-25T20:19:01.071242Z","iopub.status.idle":"2023-02-25T20:19:01.433349Z","shell.execute_reply.started":"2023-02-25T20:19:01.071176Z","shell.execute_reply":"2023-02-25T20:19:01.432004Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"var = train_csv[train_csv[\"file_name\"].duplicated() == True].shape[0]\nprint(var)","metadata":{"execution":{"iopub.status.busy":"2023-02-25T20:21:35.035373Z","iopub.execute_input":"2023-02-25T20:21:35.035888Z","iopub.status.idle":"2023-02-25T20:21:35.094579Z","shell.execute_reply.started":"2023-02-25T20:21:35.035847Z","shell.execute_reply":"2023-02-25T20:21:35.093076Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"with open('/kaggle/input/inat-idaho-images/iWildCam_2019_iNat_Idaho/iWildCam_2019_iNat_Idaho.json') as json_data:\n    supp_data = json.load(json_data)","metadata":{"execution":{"iopub.status.busy":"2023-02-25T20:21:47.145296Z","iopub.execute_input":"2023-02-25T20:21:47.145790Z","iopub.status.idle":"2023-02-25T20:21:47.366915Z","shell.execute_reply.started":"2023-02-25T20:21:47.145750Z","shell.execute_reply":"2023-02-25T20:21:47.365582Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"new_data = pd.DataFrame.from_dict(supp_data['images'])\nnew_data = new_data[['width','height']]\n# new_data.rename(columns={'width':'width'}, inplace=True)\nnew_data.describe()","metadata":{"execution":{"iopub.status.busy":"2023-02-25T20:42:01.251703Z","iopub.execute_input":"2023-02-25T20:42:01.253345Z","iopub.status.idle":"2023-02-25T20:42:01.341341Z","shell.execute_reply.started":"2023-02-25T20:42:01.253275Z","shell.execute_reply":"2023-02-25T20:42:01.339970Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"image_df = pd.DataFrame.from_dict(supp_data['images'])\nimage_df = image_df[['file_name','id']]\nimage_df.rename(columns={'id':'image_id'}, inplace=True)\nimage_df.head()","metadata":{"execution":{"iopub.status.busy":"2023-02-25T20:21:49.621765Z","iopub.execute_input":"2023-02-25T20:21:49.623682Z","iopub.status.idle":"2023-02-25T20:21:49.704981Z","shell.execute_reply.started":"2023-02-25T20:21:49.623625Z","shell.execute_reply":"2023-02-25T20:21:49.702852Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"annotation_df = pd.DataFrame.from_dict(supp_data['annotations'])\nannotation_df = annotation_df[['category_id','image_id']]\nannotation_df.head()\nannotation_df.size","metadata":{"execution":{"iopub.status.busy":"2023-02-25T20:21:52.426444Z","iopub.execute_input":"2023-02-25T20:21:52.426980Z","iopub.status.idle":"2023-02-25T20:21:52.481807Z","shell.execute_reply.started":"2023-02-25T20:21:52.426935Z","shell.execute_reply":"2023-02-25T20:21:52.480404Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"label_df_idho = annotation_df[['image_id','category_id']].groupby(['category_id']).count().reset_index()\nlabel_df_idho.columns = ['category_id','count']\nlabel_df_idho = label_df_idho.sort_values(by=['count'], ascending=False)\nlabel_df_idho","metadata":{"execution":{"iopub.status.busy":"2023-02-25T20:22:55.377373Z","iopub.execute_input":"2023-02-25T20:22:55.377936Z","iopub.status.idle":"2023-02-25T20:22:55.398145Z","shell.execute_reply.started":"2023-02-25T20:22:55.377891Z","shell.execute_reply":"2023-02-25T20:22:55.396982Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sns.barplot(x=label_df_idho['category_id'], y=label_df_idho['count'])\nplt.title('Distribution by classes')","metadata":{"execution":{"iopub.status.busy":"2023-02-25T20:22:58.982346Z","iopub.execute_input":"2023-02-25T20:22:58.982866Z","iopub.status.idle":"2023-02-25T20:22:59.401919Z","shell.execute_reply.started":"2023-02-25T20:22:58.982803Z","shell.execute_reply":"2023-02-25T20:22:59.399793Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"var = image_df[image_df[\"file_name\"].duplicated() == True].shape[0]\nprint(var)","metadata":{"execution":{"iopub.status.busy":"2023-02-25T20:23:03.051950Z","iopub.execute_input":"2023-02-25T20:23:03.052410Z","iopub.status.idle":"2023-02-25T20:23:03.068675Z","shell.execute_reply.started":"2023-02-25T20:23:03.052374Z","shell.execute_reply":"2023-02-25T20:23:03.066948Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data = {'category_id':[np.zeros],\n        'count':[np.zeros]}\n# Create DataFrame\nmerge_label = pd.DataFrame(data)\nfor i in range(23):\n    if (label_df_idho.category_id == i).any():\n        a = label_df_idho.index[label_df_idho['category_id'] == i].tolist()\n        a = a[0]\n        aa = label_df_idho['count'][a]\n        if (label_df_train.category_id == i).any():\n            b = label_df_train.index[label_df_train['category_id'] == i].tolist()\n            b = b[0]\n            bb = label_df_train['count'][b]\n            merge_label.loc[len(merge_label.index)] = [int(i), int(aa+bb)]\n        else:\n            merge_label.loc[len(merge_label.index)] = [int(i), int(aa)]\n    elif (label_df_train.category_id == i).any():\n            b = label_df_train.index[label_df_train['category_id'] == i].tolist()\n            b = b[0]\n            bb = label_df_train['count'][b]\n            merge_label.loc[len(merge_label.index)] = [int(i), int(bb)]       \n\n            \nmerge_label.drop(index=merge_label.index[0], axis=0, inplace=True)          \nmerge_label = merge_label.sort_values(by=['count'], ascending=False)\n","metadata":{"execution":{"iopub.status.busy":"2023-02-25T20:23:06.527280Z","iopub.execute_input":"2023-02-25T20:23:06.528022Z","iopub.status.idle":"2023-02-25T20:23:06.627071Z","shell.execute_reply.started":"2023-02-25T20:23:06.527921Z","shell.execute_reply":"2023-02-25T20:23:06.625692Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"merge_label","metadata":{"execution":{"iopub.status.busy":"2023-02-25T20:23:29.420995Z","iopub.execute_input":"2023-02-25T20:23:29.421472Z","iopub.status.idle":"2023-02-25T20:23:29.438889Z","shell.execute_reply.started":"2023-02-25T20:23:29.421433Z","shell.execute_reply":"2023-02-25T20:23:29.436704Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sns.barplot(x=merge_label['category_id'], y=merge_label['count'])\nplt.title('Distribution by classes')","metadata":{"execution":{"iopub.status.busy":"2023-02-25T20:23:48.211214Z","iopub.execute_input":"2023-02-25T20:23:48.211671Z","iopub.status.idle":"2023-02-25T20:23:48.616249Z","shell.execute_reply.started":"2023-02-25T20:23:48.211633Z","shell.execute_reply":"2023-02-25T20:23:48.614951Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Read the Data","metadata":{}},{"cell_type":"code","source":"train=pd.read_csv(\"/kaggle/input/iwildcam-2019-fgvc6/train.csv\")\nlen(train)\n#train.loc[0][\"category_id\"]\ncountres= []\ndata = {'label':[],\n        'path':[]}\n# Create DataFrame\nall_data = pd.DataFrame(data)\nfor i in range(23):\n    countres.append(0)\n# importing the zipfile module\nfrom zipfile import ZipFile\n  \n# loading the temp.zip and creating a zip object\nwith ZipFile(\"/kaggle/input/iwildcam-2019-fgvc6/train_images.zip\", 'r') as zObject:\n    for i in range(196299):\n        label=int(train.loc[i][\"category_id\"])\n        if countres[label] < 350:\n            countres[label]+=1\n            path2=\"/kaggle/working/train_images\"\n            all_data.loc[len(all_data.index)] = [label, os.path.join(path2, train.loc[i][\"file_name\"])]       \n            zObject.extract(train.loc[i][\"file_name\"], path=\"/kaggle/working/train_images\")\nzObject.close()\n\nlst = os.listdir('/kaggle/input')\nlst.remove('iwildcam-2019-fgvc6')\nprint(lst)\n\nclasses_wild = {'empty': 0, 'deer': 1, 'moosee': 2, 'squirrel': 3, 'rodent': 4, 'small-mammal': 5, \\\n                'eellkk': 6, 'pronghorn-antelope': 7, 'rabbit': 8, 'bighorn-sheep': 9, 'fox': 10, 'coyote': 11, \\\n                'black-bear': 12, 'raccoon': 13, 'skunk': 14, 'wolfff': 15, 'bobcat': 16, 'cat': 17,\\\n                'dog': 18, 'opossum': 19, 'bisonn': 20, 'mountain-goat': 21, 'mountin-lione': 22}\n\nfor i, name in enumerate(lst):\n    label = int(classes_wild[name])\n    this_name = os.path.join('/kaggle/input/', name)\n    this_folder = os.listdir(this_name)\n    for n, current_name in enumerate(this_folder):\n        all_data.loc[len(all_data.index)] = [label, os.path.join(this_name, current_name)]       ","metadata":{"execution":{"iopub.status.busy":"2023-02-25T11:38:26.027522Z","iopub.execute_input":"2023-02-25T11:38:26.028037Z","iopub.status.idle":"2023-02-25T11:40:23.208008Z","shell.execute_reply.started":"2023-02-25T11:38:26.027997Z","shell.execute_reply":"2023-02-25T11:40:23.206804Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(all_data)","metadata":{"execution":{"iopub.status.busy":"2023-02-25T11:40:23.209730Z","iopub.execute_input":"2023-02-25T11:40:23.210164Z","iopub.status.idle":"2023-02-25T11:40:23.222730Z","shell.execute_reply.started":"2023-02-25T11:40:23.210090Z","shell.execute_reply":"2023-02-25T11:40:23.221018Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"img=[]\nfor i in range(len(all_data.index)):\n    image=cv2.imread(all_data.loc[i].path)\n    res=cv2.resize(image,(64,64))\n    img.append(res)\nimg=np.array(img)","metadata":{"execution":{"iopub.status.busy":"2023-02-25T11:40:23.225840Z","iopub.execute_input":"2023-02-25T11:40:23.226255Z","iopub.status.idle":"2023-02-25T11:41:58.743424Z","shell.execute_reply.started":"2023-02-25T11:40:23.226190Z","shell.execute_reply":"2023-02-25T11:41:58.742037Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize=(15,15))\nfor i in range(9):\n    plt.subplot(3,3,i+1)\n    plt.imshow(img[i+5020])","metadata":{"execution":{"iopub.status.busy":"2023-02-25T11:41:58.744945Z","iopub.execute_input":"2023-02-25T11:41:58.745326Z","iopub.status.idle":"2023-02-25T11:42:00.142528Z","shell.execute_reply.started":"2023-02-25T11:41:58.745293Z","shell.execute_reply":"2023-02-25T11:42:00.141105Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# DenseNet121","metadata":{}},{"cell_type":"code","source":"# import keras\n# from keras.callbacks import ModelCheckpoint\n# from tensorflow.keras.applications import DenseNet121","metadata":{"execution":{"iopub.status.busy":"2023-02-25T11:42:00.143911Z","iopub.execute_input":"2023-02-25T11:42:00.144263Z","iopub.status.idle":"2023-02-25T11:42:00.149550Z","shell.execute_reply.started":"2023-02-25T11:42:00.144231Z","shell.execute_reply":"2023-02-25T11:42:00.148033Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# model = DenseNet121(\n#     weights=None, \n#     include_top=True, \n#     classes=23,\n#     input_shape=(64, 64, 3)\n# )\n\n# model.compile(loss='categorical_crossentropy',\n#               optimizer='adam',\n#               metrics=['accuracy'])\n\n# model.summary()","metadata":{"execution":{"iopub.status.busy":"2023-02-25T11:42:00.151374Z","iopub.execute_input":"2023-02-25T11:42:00.151919Z","iopub.status.idle":"2023-02-25T11:42:00.164055Z","shell.execute_reply.started":"2023-02-25T11:42:00.151879Z","shell.execute_reply":"2023-02-25T11:42:00.162754Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# checkpoint = ModelCheckpoint(\n#     'model.h5', \n#     monitor='val_acc', \n#     verbose=0, \n#     save_best_only=True, \n#     save_weights_only=False,\n#     mode='auto'\n# )","metadata":{"execution":{"iopub.status.busy":"2023-02-25T11:42:00.166019Z","iopub.execute_input":"2023-02-25T11:42:00.166458Z","iopub.status.idle":"2023-02-25T11:42:00.177795Z","shell.execute_reply.started":"2023-02-25T11:42:00.166423Z","shell.execute_reply":"2023-02-25T11:42:00.176593Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# history = model.fit_generator(\n#     train_generator,\n#     steps_per_epoch=75000 / 128, \n#     epochs=10,\n#     callbacks=[checkpoint],\n#     validation_data=val_generator,\n#     use_multiprocessing=True,\n#     workers=2, \n#     verbose=1\n# )","metadata":{"execution":{"iopub.status.busy":"2023-02-25T11:42:00.179404Z","iopub.execute_input":"2023-02-25T11:42:00.179767Z","iopub.status.idle":"2023-02-25T11:42:00.189829Z","shell.execute_reply.started":"2023-02-25T11:42:00.179737Z","shell.execute_reply":"2023-02-25T11:42:00.188976Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# model.load_weights('model.h5')\n\n# val_scores = model.evaluate_generator(\n#     generator=val_generator,\n#     steps=len(val_generator),\n#     use_multiprocessing=True,\n#     verbose=1,\n#     workers=2\n# )\n\n# print('\\nValidation loss:', val_scores[0])\n# print('Validation accuracy:', val_scores[1])","metadata":{"execution":{"iopub.status.busy":"2023-02-25T11:42:00.192995Z","iopub.execute_input":"2023-02-25T11:42:00.193373Z","iopub.status.idle":"2023-02-25T11:42:00.205171Z","shell.execute_reply.started":"2023-02-25T11:42:00.193340Z","shell.execute_reply":"2023-02-25T11:42:00.204124Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# with open('history.json', 'w') as f:\n#     json.dump(history.history, f)\n\n# history_df = pd.DataFrame(history.history)\n# history_df[['loss', 'val_loss']].plot()\n# history_df[['acc', 'val_acc']].plot()","metadata":{"execution":{"iopub.status.busy":"2023-02-25T11:42:00.206406Z","iopub.execute_input":"2023-02-25T11:42:00.207478Z","iopub.status.idle":"2023-02-25T11:42:00.217223Z","shell.execute_reply.started":"2023-02-25T11:42:00.207443Z","shell.execute_reply":"2023-02-25T11:42:00.216360Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"np.random.seed(10)\nfrom keras.utils import np_utils\nfrom keras.models import Sequential\nfrom keras.layers import Convolution2D,Dense,MaxPool2D,Activation,Dropout,Flatten\nfrom keras.optimizers import Adam\nfrom sklearn.model_selection import train_test_split\n# from keras.layers.normalization import BatchNormalization\nfrom tensorflow.keras.models import Sequential\nfrom tensorflow.keras.layers import (\n    BatchNormalization, SeparableConv2D, MaxPooling2D, Activation, Flatten, Dropout, Dense\n)\nfrom tensorflow.keras import backend as K","metadata":{"execution":{"iopub.status.busy":"2023-02-25T11:42:00.218231Z","iopub.execute_input":"2023-02-25T11:42:00.218607Z","iopub.status.idle":"2023-02-25T11:42:09.494457Z","shell.execute_reply.started":"2023-02-25T11:42:00.218577Z","shell.execute_reply":"2023-02-25T11:42:09.493274Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"img[6024].shape","metadata":{"execution":{"iopub.status.busy":"2023-02-25T11:42:09.496008Z","iopub.execute_input":"2023-02-25T11:42:09.496992Z","iopub.status.idle":"2023-02-25T11:42:09.503254Z","shell.execute_reply.started":"2023-02-25T11:42:09.496947Z","shell.execute_reply":"2023-02-25T11:42:09.502465Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train,X_test,y_train,y_test=train_test_split(img,all_data.label,test_size=0.2)\ndel img\ny_train=y_train.astype(int)\ny_test=y_test.astype(int)\ny_train=np.array(y_train).reshape(-1,1)\ny_test=np.array(y_test).reshape(-1,1)\nX_train=X_train.reshape(-1,64,64,3)/255 #Normalize\nX_test=X_test.reshape(-1,64,64,3)/255\ny_train=np_utils.to_categorical(y_train,num_classes=int(max(all_data.label))+1)\ny_test=np_utils.to_categorical(y_test,num_classes=int(max(all_data.label))+1)","metadata":{"execution":{"iopub.status.busy":"2023-02-25T11:42:09.504514Z","iopub.execute_input":"2023-02-25T11:42:09.504824Z","iopub.status.idle":"2023-02-25T11:42:09.981139Z","shell.execute_reply.started":"2023-02-25T11:42:09.504797Z","shell.execute_reply":"2023-02-25T11:42:09.979869Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model=Sequential()\nmodel.add(Convolution2D(filters=64,kernel_size=(5,5),input_shape=(64,64,3),padding='same'))\nmodel.add(BatchNormalization())\nmodel.add(Activation('relu'))\nmodel.add(Dropout(rate=0.35))\nmodel.add(MaxPool2D(pool_size=(2,2),padding='same'))\n\nmodel.add(Convolution2D(filters=128,kernel_size=(3,3),padding='same'))\nmodel.add(BatchNormalization())\nmodel.add(Activation('relu'))\nmodel.add(Dropout(rate=0.45))\nmodel.add(MaxPool2D(pool_size=(2,2),padding='same'))\n\nmodel.add(Convolution2D(filters=256,kernel_size=(3,3),padding='same'))\nmodel.add(BatchNormalization())\nmodel.add(Activation('relu'))\nmodel.add(Dropout(rate=0.55))\nmodel.add(MaxPool2D(pool_size=(2,2),padding='same'))\n\nmodel.add(Convolution2D(filters=512,kernel_size=(3,3),padding='same'))\nmodel.add(BatchNormalization())\nmodel.add(Activation('relu'))\nmodel.add(Dropout(rate=0.65))\nmodel.add(MaxPool2D(pool_size=(2,2),padding='same'))\n\nmodel.add(Flatten())\n\nmodel.add(Dense(1024,activation='relu'))\nmodel.add(BatchNormalization())\nmodel.add(Activation('relu'))\n# model.add(Dropout(rate=0.75))\n\nmodel.add(Dense(int(max(all_data.label))+1,activation='softmax'))\n\nmodel.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])\n\ntrain_history=model.fit(X_train,y_train,validation_split=0.2,epochs=20,batch_size=64,verbose=1)\naccuracy=model.evaluate(X_test,y_test,verbose=1)\nprint(\"test accuracy:\",accuracy[1])#accuracy for test set\n\n\n\ndef show_train_history(train_history,train,validation):\n        plt.plot(train_history.history[train])\n        plt.plot(train_history.history[validation])\n        plt.title('Train History')\n        plt.ylabel('train')\n        plt.xlabel('Epoch')\n        plt.legend(['train','validation'],loc='upper left')\n        plt.show()\n\nshow_train_history(train_history,'accuracy','val_accuracy') #acc:accuracy for training set. val_acc:accuracy for validation.","metadata":{"execution":{"iopub.status.busy":"2023-02-25T11:44:45.446075Z","iopub.execute_input":"2023-02-25T11:44:45.449158Z","iopub.status.idle":"2023-02-25T12:29:17.474474Z","shell.execute_reply.started":"2023-02-25T11:44:45.449063Z","shell.execute_reply":"2023-02-25T12:29:17.473268Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model=Sequential()\nmodel.add(Convolution2D(filters=64,kernel_size=(3,3),input_shape=(64,64,3),padding='same'))\nmodel.add(BatchNormalization())\nmodel.add(Activation('relu'))\nmodel.add(Dropout(rate=0.35))\n\nmodel.add(MaxPool2D(pool_size=(2,2),padding='same'))\n\nmodel.add(Convolution2D(filters=128,kernel_size=(3,3),padding='same'))\nmodel.add(BatchNormalization())\nmodel.add(Activation('relu'))\nmodel.add(Dropout(rate=0.45))\n\nmodel.add(MaxPool2D(pool_size=(2,2),padding='same'))\n\nmodel.add(Flatten())\n\nmodel.add(Dense(1024,activation='relu'))\nmodel.add(BatchNormalization())\nmodel.add(Activation('relu'))\nmodel.add(Dropout(rate=0.75))\n\nmodel.add(Dense(int(max(all_data.label))+1,activation='softmax'))\n\nmodel.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])\n\ntrain_history=model.fit(X_train,y_train,validation_split=0.2,epochs=30,batch_size=64,verbose=1)\naccuracy=model.evaluate(X_test,y_test,verbose=1)\nprint(\"test accuracy:\",accuracy[1])#accuracy for test set\n\n\n\ndef show_train_history(train_history,train,validation):\n        plt.plot(train_history.history[train])\n        plt.plot(train_history.history[validation])\n        plt.title('Train History')\n        plt.ylabel('train')\n        plt.xlabel('Epoch')\n        plt.legend(['train','validation'],loc='upper left')\n        plt.show()\n\nshow_train_history(train_history,'accuracy','val_accuracy') #acc:accuracy for training set. val_acc:accuracy for validation.","metadata":{"execution":{"iopub.status.busy":"2023-02-25T06:51:09.565958Z","iopub.execute_input":"2023-02-25T06:51:09.566480Z","iopub.status.idle":"2023-02-25T07:40:14.048358Z","shell.execute_reply.started":"2023-02-25T06:51:09.566439Z","shell.execute_reply":"2023-02-25T07:40:14.046775Z"},"trusted":true},"execution_count":null,"outputs":[]}]}