{"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":"!pip install py7zr\nimport py7zr","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2022-05-24T06:09:15.562652Z","iopub.execute_input":"2022-05-24T06:09:15.563138Z","iopub.status.idle":"2022-05-24T06:09:47.225465Z","shell.execute_reply.started":"2022-05-24T06:09:15.563046Z","shell.execute_reply":"2022-05-24T06:09:47.224670Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator,load_img\nfrom tensorflow.keras.utils import to_categorical\nfrom sklearn.model_selection import train_test_split\nimport matplotlib.pyplot as plt\nimport random\nimport os\nimport tensorflow as tf\nfrom tensorflow import keras\nfrom tensorflow.keras import layers\nfrom tqdm import tqdm\nimport time\nimport cv2\nimport numpy as np\nimport pandas as pd\nimport os\n# os.environ[\"CUDA_VISIBLE_DEVICES\"]=\"1\"; \n\nimport matplotlib.pyplot as plt\nimport tensorflow as tf\n\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\nfrom tensorflow.keras.layers import Dense, Activation,Dropout,Conv2D, MaxPooling2D,BatchNormalization\nfrom tensorflow.keras.optimizers import Adamax\nfrom tensorflow.keras.metrics import categorical_crossentropy\nfrom tensorflow.keras.models import Model","metadata":{"execution":{"iopub.status.busy":"2022-05-24T06:09:47.227523Z","iopub.execute_input":"2022-05-24T06:09:47.227831Z","iopub.status.idle":"2022-05-24T06:09:53.832573Z","shell.execute_reply.started":"2022-05-24T06:09:47.227790Z","shell.execute_reply":"2022-05-24T06:09:53.831802Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_train=pd.read_csv('../input/data-csv/df_train.csv')\ndf_val=pd.read_csv('../input/data-csv/df_val.csv')\ndf_test=pd.read_csv('../input/data-csv/df_test.csv')","metadata":{"execution":{"iopub.status.busy":"2022-05-23T17:07:07.629645Z","iopub.execute_input":"2022-05-23T17:07:07.629944Z","iopub.status.idle":"2022-05-23T17:07:07.668607Z","shell.execute_reply.started":"2022-05-23T17:07:07.629913Z","shell.execute_reply":"2022-05-23T17:07:07.667844Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"archive=py7zr.SevenZipFile('../input/cifar-10/train.7z', mode='r')\narchive.extractall(path=\"kaggle/working/temp\")\narchive.close()","metadata":{"execution":{"iopub.status.busy":"2022-05-24T06:09:53.833879Z","iopub.execute_input":"2022-05-24T06:09:53.834163Z","iopub.status.idle":"2022-05-24T06:10:40.456322Z","shell.execute_reply.started":"2022-05-24T06:09:53.834129Z","shell.execute_reply":"2022-05-24T06:10:40.455548Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Image_Width=32\nImage_Height=32\nImage_Size=(Image_Width,Image_Height)\nImage_Channels=3\nbatch_size=128","metadata":{"execution":{"iopub.status.busy":"2022-05-23T17:07:14.737852Z","iopub.execute_input":"2022-05-23T17:07:14.738112Z","iopub.status.idle":"2022-05-23T17:07:14.74348Z","shell.execute_reply.started":"2022-05-23T17:07:14.738084Z","shell.execute_reply":"2022-05-23T17:07:14.742649Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_datagen = ImageDataGenerator(rescale=1./255,width_shift_range=0.1, height_shift_range=0.1, fill_mode=\"nearest\")\ntrain_generator = train_datagen.flow_from_dataframe(df_train, directory=\"kaggle/working/temp/train/\",x_col='id',y_col='label', shuffle=False,target_size=Image_Size, class_mode='categorical', batch_size=batch_size,)\n\nvalidation_datagen = ImageDataGenerator(rescale=1./255)\nval_generator = validation_datagen.flow_from_dataframe(df_val,  \"kaggle/working/temp/train/\",x_col='id',y_col='label',shuffle=False,target_size=Image_Size, class_mode='categorical', batch_size=batch_size )\n\ntest_datagen = ImageDataGenerator(rescale=1./255)\ntest_generator = test_datagen.flow_from_dataframe(df_test,  \"kaggle/working/temp/train/\",x_col='id',y_col='label',shuffle=False,target_size=Image_Size, class_mode='categorical', batch_size=batch_size )\n","metadata":{"execution":{"iopub.status.busy":"2022-05-23T17:07:16.640556Z","iopub.execute_input":"2022-05-23T17:07:16.641109Z","iopub.status.idle":"2022-05-23T17:07:17.122169Z","shell.execute_reply.started":"2022-05-23T17:07:16.641071Z","shell.execute_reply":"2022-05-23T17:07:17.121259Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model=tf.keras.models.load_model ('../input/data-csv/model_real.h5')","metadata":{"execution":{"iopub.status.busy":"2022-05-23T17:07:20.031349Z","iopub.execute_input":"2022-05-23T17:07:20.032071Z","iopub.status.idle":"2022-05-23T17:07:22.400137Z","shell.execute_reply.started":"2022-05-23T17:07:20.03203Z","shell.execute_reply":"2022-05-23T17:07:22.39934Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"predict = model.predict(train_generator)","metadata":{"execution":{"iopub.status.busy":"2022-05-23T17:09:28.510389Z","iopub.execute_input":"2022-05-23T17:09:28.511102Z","iopub.status.idle":"2022-05-23T17:10:06.828723Z","shell.execute_reply.started":"2022-05-23T17:09:28.511063Z","shell.execute_reply":"2022-05-23T17:10:06.827942Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_train['actual_lable'] =  train_generator.classes\ndf_train['predict'] = np.argmax(predict, axis=-1)\ndata_label=[]\nfor k,v in train_generator.class_indices.items():\n  data_label.append(str(k))","metadata":{"execution":{"iopub.status.busy":"2022-05-23T17:10:06.830657Z","iopub.execute_input":"2022-05-23T17:10:06.830902Z","iopub.status.idle":"2022-05-23T17:10:06.855223Z","shell.execute_reply.started":"2022-05-23T17:10:06.830866Z","shell.execute_reply":"2022-05-23T17:10:06.854608Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\ncount=0\nfor i in range(len(df_train)):\n    if df_train['actual_lable'][i]== df_train['predict'][i]:\n        count+=1\nprint('so nhan dung la: ',count)\n","metadata":{"execution":{"iopub.status.busy":"2022-05-23T17:10:06.856533Z","iopub.execute_input":"2022-05-23T17:10:06.857018Z","iopub.status.idle":"2022-05-23T17:10:07.403735Z","shell.execute_reply.started":"2022-05-23T17:10:06.856981Z","shell.execute_reply":"2022-05-23T17:10:07.402173Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# df_train=pd.read_csv('../input/data-csv/df_train_add_custom.csv')\n# df_train=pd.read_csv('../input/data-csv/df_train_add_custom.csv')\n# df_test=pd.read_csv('../input/data-csv/df_test_add_custom.csv')\ndata_train_addition_id=[]\ndata_train_addition_label=[]\nfor i in tqdm(range(len(df_train))):\n    if (df_train['actual_lable'][i] !=df_train['predict'][i]):\n        data_train_addition_id.append(df_train['id'][i])\n        data_train_addition_label.append(df_train['label'][i])\n    elif np.max(predict[i])<0.78:\n        data_train_addition_id.append(df_train['id'][i])\n        data_train_addition_label.append(df_train['label'][i])\ndf_aug=pd.DataFrame()\ndf_aug['id']=pd.DataFrame(data_train_addition_id)\ndf_aug['label']=pd.DataFrame(data_train_addition_label)\ndf_aug.to_csv('wrong_train_78.csv',index=False)\n    ","metadata":{"execution":{"iopub.status.busy":"2022-05-23T17:10:07.405656Z","iopub.execute_input":"2022-05-23T17:10:07.405923Z","iopub.status.idle":"2022-05-23T17:10:08.415961Z","shell.execute_reply.started":"2022-05-23T17:10:07.405887Z","shell.execute_reply":"2022-05-23T17:10:08.41526Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_val.to_csv('df_val_add_custom.csv',index=False)","metadata":{"execution":{"iopub.status.busy":"2022-05-23T17:10:28.367936Z","iopub.execute_input":"2022-05-23T17:10:28.368717Z","iopub.status.idle":"2022-05-23T17:10:28.385873Z","shell.execute_reply.started":"2022-05-23T17:10:28.368666Z","shell.execute_reply":"2022-05-23T17:10:28.385232Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# visualize dataset","metadata":{}},{"cell_type":"code","source":"count=0\nfor k in range(0,10):\n    for i in tqdm(range(len(df_test))):\n        if (df_test['actual_lable'][i] !=df_test['predict'][i]):\n            if (df_test['actual_lable'][i]==k):\n                count+=1\n    print(k,count)\n    count=0\n\ncount=0\nprint('TRAINING')\nfor k in range(0,10):\n    for i in tqdm(range(len(df_train))):\n        if (df_train['actual_lable'][i] !=df_train['predict'][i]):\n            if (df_train['actual_lable'][i]==k):\n                count+=1\n    print(k,count)\n    count=0\nprint('VALIDATION')\nfor k in range(0,10):\n    for i in tqdm(range(len(df_val))):\n        if (df_val['actual_lable'][i] !=df_val['predict'][i]):\n            if (df_val['actual_lable'][i]==k):\n                count+=1\n    print(k,count)\n    count=0","metadata":{"execution":{"iopub.status.busy":"2022-05-23T17:13:32.425539Z","iopub.execute_input":"2022-05-23T17:13:32.425969Z","iopub.status.idle":"2022-05-23T17:13:40.877671Z","shell.execute_reply.started":"2022-05-23T17:13:32.425933Z","shell.execute_reply":"2022-05-23T17:13:40.876804Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"wrong_train_03=pd.read_csv('./wrong_train_78.csv')\nwrong_val_03=pd.read_csv('./wrong_val_78.csv')\nwrong_test_03=pd.read_csv('./wrong_test_78.csv')\nprint(len(wrong_train_03))\nprint(len(wrong_val_03))\nprint(len(wrong_test_03))","metadata":{"execution":{"iopub.status.busy":"2022-05-23T17:14:31.715869Z","iopub.execute_input":"2022-05-23T17:14:31.71613Z","iopub.status.idle":"2022-05-23T17:14:31.731235Z","shell.execute_reply.started":"2022-05-23T17:14:31.7161Z","shell.execute_reply":"2022-05-23T17:14:31.7305Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"a=[]\nfor i in range(len(df_test)):\n    if df_test['actual_lable'][i]== df_test['predict'][i]:\n        a.append(np.max(predict[i],axis=-1))\nprint(np.min(a))","metadata":{"execution":{"iopub.status.busy":"2022-05-23T13:31:33.120908Z","iopub.execute_input":"2022-05-23T13:31:33.121254Z","iopub.status.idle":"2022-05-23T13:31:33.242082Z","shell.execute_reply.started":"2022-05-23T13:31:33.121217Z","shell.execute_reply":"2022-05-23T13:31:33.240858Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Làm giàu dữ liệu","metadata":{}},{"cell_type":"code","source":"wrong_train_03=pd.read_csv('./wrong_train_78.csv')\nwrong_val_03=pd.read_csv('./wrong_val_78.csv')\nwrong_test_03=pd.read_csv('./wrong_test_78.csv')","metadata":{"execution":{"iopub.status.busy":"2022-05-23T17:16:42.817418Z","iopub.execute_input":"2022-05-23T17:16:42.818313Z","iopub.status.idle":"2022-05-23T17:16:42.83367Z","shell.execute_reply.started":"2022-05-23T17:16:42.818266Z","shell.execute_reply":"2022-05-23T17:16:42.83298Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data_train_addition_id=[]\ndata_train_addition_label=[]","metadata":{"execution":{"iopub.status.busy":"2022-05-23T17:17:52.024121Z","iopub.execute_input":"2022-05-23T17:17:52.024553Z","iopub.status.idle":"2022-05-23T17:17:52.027855Z","shell.execute_reply.started":"2022-05-23T17:17:52.024512Z","shell.execute_reply":"2022-05-23T17:17:52.027186Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data_train_addition_id","metadata":{"execution":{"iopub.status.busy":"2022-05-23T14:03:52.773675Z","iopub.execute_input":"2022-05-23T14:03:52.774001Z","iopub.status.idle":"2022-05-23T14:03:52.791487Z","shell.execute_reply.started":"2022-05-23T14:03:52.773965Z","shell.execute_reply":"2022-05-23T14:03:52.790582Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"path_dir_save='kaggle/working/temp2/train/'\nfrom tqdm import tqdm\nfor i in tqdm(range(len(wrong_train_03))):\n    fname=wrong_train_03['id'][i]\n    img=cv2.imread(os.path.join('kaggle/working/temp2/train/',fname))\n    rotated_img=cv2.flip(img, 1)\n    rotated_img_name=fname[:(len(fname)-4)] + '_flip_'+fname[(len(fname)-4):]\n    data_train_addition_id.append(rotated_img_name)\n    data_train_addition_label.append(wrong_train_03['label'][i])\n    cv2.imwrite(os.path.join(path_dir_save, rotated_img_name),rotated_img)","metadata":{"execution":{"iopub.status.busy":"2022-05-23T17:17:52.029139Z","iopub.execute_input":"2022-05-23T17:17:52.029597Z","iopub.status.idle":"2022-05-23T17:17:53.246151Z","shell.execute_reply.started":"2022-05-23T17:17:52.029562Z","shell.execute_reply":"2022-05-23T17:17:53.245448Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"wrong_train_032=pd.DataFrame()\nwrong_train_032['id']=pd.DataFrame(data_train_addition_id)\nwrong_train_032['label']=pd.DataFrame(data_train_addition_label)\nwrong_train_03=pd.concat([wrong_train_03,wrong_train_032],ignore_index=True)","metadata":{"execution":{"iopub.status.busy":"2022-05-23T17:17:53.248065Z","iopub.execute_input":"2022-05-23T17:17:53.248648Z","iopub.status.idle":"2022-05-23T17:17:53.258871Z","shell.execute_reply.started":"2022-05-23T17:17:53.24861Z","shell.execute_reply":"2022-05-23T17:17:53.258086Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data_train_addition_id=[]\ndata_train_addition_label=[]","metadata":{"execution":{"iopub.status.busy":"2022-05-23T17:17:53.259944Z","iopub.execute_input":"2022-05-23T17:17:53.260394Z","iopub.status.idle":"2022-05-23T17:17:53.269346Z","shell.execute_reply.started":"2022-05-23T17:17:53.260358Z","shell.execute_reply":"2022-05-23T17:17:53.268665Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"goc=5\npath_dir_save='kaggle/working/temp2/train/'\nfor i in tqdm(range(len(wrong_train_03))):\n    fname=str(wrong_train_03['id'][i])\n#     print(len(fname))\n#     print(os.path.join('kaggle/working/temp3/train/',fname))\n    img=cv2.imread(os.path.join('kaggle/working/temp2/train/',fname))\n    h,w=img.shape[:2]\n    rotation_matrix=cv2.getRotationMatrix2D((w/2,h/2),goc,.8)\n    rotated_img=cv2.warpAffine(img,rotation_matrix,(w,h))\n    rotated_img_name=fname[:(len(fname)-4)] + '_rotated_'+str(goc)+fname[(len(fname)-4):]\n    data_train_addition_id.append(rotated_img_name)\n    data_train_addition_label.append(wrong_train_03['label'][i])\n    cv2.imwrite(os.path.join(path_dir_save, rotated_img_name),rotated_img)","metadata":{"execution":{"iopub.status.busy":"2022-05-23T17:19:03.515715Z","iopub.execute_input":"2022-05-23T17:19:03.516295Z","iopub.status.idle":"2022-05-23T17:19:06.226073Z","shell.execute_reply.started":"2022-05-23T17:19:03.51625Z","shell.execute_reply":"2022-05-23T17:19:06.225416Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_train_062=pd.DataFrame()\ndf_train_062['id']=pd.DataFrame(data_train_addition_id)\ndf_train_062['label']=pd.DataFrame(data_train_addition_label)\n# df_train_06=pd.concat([df_train_06,df_train_062],ignore_index=True)\nwrong_train_03=pd.concat([wrong_train_03,df_train_062],ignore_index=True)","metadata":{"execution":{"iopub.status.busy":"2022-05-23T17:19:12.716772Z","iopub.execute_input":"2022-05-23T17:19:12.71726Z","iopub.status.idle":"2022-05-23T17:19:12.731251Z","shell.execute_reply.started":"2022-05-23T17:19:12.717221Z","shell.execute_reply":"2022-05-23T17:19:12.730361Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Image_Width=71\nImage_Height=71\nImage_Size=(Image_Width,Image_Height)\nImage_Channels=3\nbatch_size=128","metadata":{"execution":{"iopub.status.busy":"2022-05-23T17:19:16.938816Z","iopub.execute_input":"2022-05-23T17:19:16.939122Z","iopub.status.idle":"2022-05-23T17:19:16.94406Z","shell.execute_reply.started":"2022-05-23T17:19:16.939071Z","shell.execute_reply":"2022-05-23T17:19:16.943289Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_datagen = ImageDataGenerator(rescale=1./255,width_shift_range=0.1, height_shift_range=0.1, fill_mode=\"nearest\")\ntrain_generator = train_datagen.flow_from_dataframe(wrong_train_03, directory=\"kaggle/working/temp/train/\",x_col='id',y_col='label', target_size=Image_Size, class_mode='categorical', batch_size=batch_size,)\n\nvalidation_datagen = ImageDataGenerator(rescale=1./255)\nvalidation_generator = validation_datagen.flow_from_dataframe(wrong_val_03,  \"kaggle/working/temp/train/\",x_col='id',y_col='label',target_size=Image_Size, class_mode='categorical', batch_size=batch_size )\n\ntest_datagen = ImageDataGenerator(rescale=1./255)\ntest_generator = test_datagen.flow_from_dataframe(wrong_test_03,  \"kaggle/working/temp/train/\",x_col='id',y_col='label',shuffle=False,target_size=Image_Size, class_mode='categorical', batch_size=batch_size )\n","metadata":{"execution":{"iopub.status.busy":"2022-05-23T17:19:34.132241Z","iopub.execute_input":"2022-05-23T17:19:34.132798Z","iopub.status.idle":"2022-05-23T17:19:34.331815Z","shell.execute_reply.started":"2022-05-23T17:19:34.132754Z","shell.execute_reply":"2022-05-23T17:19:34.330938Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\n# Build model\nbase_model = tf.keras.applications.xception.Xception(include_top=False,\n                                                     weights='imagenet',\n                                                     input_shape = (71,71, 3),\n                                                     pooling = \"max\"\n                                                    )\n\nbase_model.trainable = True\n\nx = base_model.output\nx = BatchNormalization() (x)\nx = Dense(32, activation = \"relu\") (x)\nx = Dropout(0.3) (x)\noutputs = Dense(10, activation = \"softmax\") (x)\n\nmodel = Model(inputs = base_model.input, outputs = outputs)\nlr = 0.00001\n\nmodel.compile(optimizer = Adamax(learning_rate = lr), loss = \"categorical_crossentropy\", metrics = [\"accuracy\"])","metadata":{"execution":{"iopub.status.busy":"2022-05-23T17:19:38.644138Z","iopub.execute_input":"2022-05-23T17:19:38.644994Z","iopub.status.idle":"2022-05-23T17:19:40.308048Z","shell.execute_reply.started":"2022-05-23T17:19:38.644952Z","shell.execute_reply":"2022-05-23T17:19:40.307324Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.summary()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from keras.callbacks import LearningRateScheduler, ModelCheckpoint,EarlyStopping\n\ncheckpoint=ModelCheckpoint('model_xception_78_2acc.h5',\n                           monitor=\"val_accuracy\",\n                           verbose=0,\n                           save_best_only=True,\n                           save_weights_only=False,\n                           mode=\"auto\",\n                           save_freq=\"epoch\")\ncheckpoint2=ModelCheckpoint('model_xception_78_2loss.h5',\n                           monitor=\"val_loss\",\n                           verbose=0,\n                           save_best_only=True,\n                           save_weights_only=False,\n                           mode=\"auto\",\n                           save_freq=\"epoch\")\nearlystop = EarlyStopping(monitor=\"val_accuracy\",\n                          min_delta=0,\n                          mode=\"auto\",\n                          patience=50,\n                          restore_best_weights=True,)\nearlystop2 = EarlyStopping(monitor=\"val_loss\",\n                          min_delta=0,\n                          mode=\"auto\",\n                          patience=50,\n                          restore_best_weights=True,)\ncallbacks = [checkpoint,checkpoint2,earlystop,earlystop2]","metadata":{"execution":{"iopub.status.busy":"2022-05-23T18:31:53.80031Z","iopub.execute_input":"2022-05-23T18:31:53.800858Z","iopub.status.idle":"2022-05-23T18:31:53.808927Z","shell.execute_reply.started":"2022-05-23T18:31:53.800822Z","shell.execute_reply":"2022-05-23T18:31:53.8081Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"n_epochs = 300\nhistory=model.fit(x = train_generator, \n         epochs = n_epochs,\n         validation_data = validation_generator,\n         callbacks = callbacks)","metadata":{"execution":{"iopub.status.busy":"2022-05-23T18:31:57.22854Z","iopub.execute_input":"2022-05-23T18:31:57.228797Z","iopub.status.idle":"2022-05-23T18:50:45.088999Z","shell.execute_reply.started":"2022-05-23T18:31:57.22877Z","shell.execute_reply":"2022-05-23T18:50:45.088243Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"H=history\n# PLOT MODEL HISTORY OF ACCURACY AND LOSS OVER EPOCHS\nplt.plot(H.history['accuracy'])\nplt.plot(H.history['val_accuracy'])\nplt.title('Model Accuracy')\nplt.ylabel('Accuracy')\nplt.xlabel('Epoch')\nplt.legend(['Train', 'Test'], loc='upper left')\nplt.savefig('Xception_03_Model_Accuracy.png')\nplt.show()\n# summarize history for loss\nplt.plot(H.history['loss'])\nplt.plot(H.history['val_loss'])\nplt.title('Model Loss')\nplt.ylabel('Loss')\nplt.xlabel('Epoch')\nplt.legend(['train', 'test'], loc='upper left')\nplt.savefig('Xception_03_Model_Loss.png')\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2022-05-23T18:53:31.372351Z","iopub.execute_input":"2022-05-23T18:53:31.373115Z","iopub.status.idle":"2022-05-23T18:53:31.836528Z","shell.execute_reply.started":"2022-05-23T18:53:31.373079Z","shell.execute_reply":"2022-05-23T18:53:31.83584Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Evaluate","metadata":{}},{"cell_type":"code","source":"# test_datagen = ImageDataGenerator(rescale=1./255)\n# test_generator = test_datagen.flow_from_dataframe(df_test_06,  \"kaggle/working/temp/train/\",x_col='id',y_col='label',shuffle=False,target_size=Image_Size, class_mode='categorical', batch_size=batch_size )\n\ntest_datagen = ImageDataGenerator(rescale=1./255)\ntest_generator = test_datagen.flow_from_dataframe(df_test,  \"kaggle/working/temp/train/\",x_col='id',y_col='label',shuffle=False,target_size=Image_Size, class_mode='categorical', batch_size=batch_size )","metadata":{"execution":{"iopub.status.busy":"2022-05-23T18:30:38.041665Z","iopub.execute_input":"2022-05-23T18:30:38.041939Z","iopub.status.idle":"2022-05-23T18:30:38.188872Z","shell.execute_reply.started":"2022-05-23T18:30:38.041909Z","shell.execute_reply":"2022-05-23T18:30:38.188103Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model=tf.keras.models.load_model ('./model_xception_78_2acc.h5')","metadata":{"execution":{"iopub.status.busy":"2022-05-23T18:53:39.159452Z","iopub.execute_input":"2022-05-23T18:53:39.159716Z","iopub.status.idle":"2022-05-23T18:53:40.723328Z","shell.execute_reply.started":"2022-05-23T18:53:39.159687Z","shell.execute_reply":"2022-05-23T18:53:40.722606Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"predict = model.predict(test_generator)","metadata":{"execution":{"iopub.status.busy":"2022-05-23T18:53:41.736576Z","iopub.execute_input":"2022-05-23T18:53:41.736837Z","iopub.status.idle":"2022-05-23T18:53:42.669744Z","shell.execute_reply.started":"2022-05-23T18:53:41.736809Z","shell.execute_reply":"2022-05-23T18:53:42.669003Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# df_test_06['actual_lable'] =  test_generator.classes\n# df_test_06['predict'] = np.argmax(predict, axis=-1)\n# data_label=[]\n# for k,v in test_generator.class_indices.items():\n#   data_label.append(str(k))\n\ndf_test['actual_lable'] =  test_generator.classes\ndf_test['predict'] = np.argmax(predict, axis=-1)\ndata_label=[]\nfor k,v in test_generator.class_indices.items():\n  data_label.append(str(k))","metadata":{"execution":{"iopub.status.busy":"2022-05-23T18:53:45.268308Z","iopub.execute_input":"2022-05-23T18:53:45.268897Z","iopub.status.idle":"2022-05-23T18:53:45.275113Z","shell.execute_reply.started":"2022-05-23T18:53:45.268858Z","shell.execute_reply":"2022-05-23T18:53:45.274451Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\n# from sklearn.metrics import classification_report\n# print(classification_report(df_test_06['actual_lable'], df_test_06['predict'], target_names = data_label))\ncount1=0\ncount2=0\nfor i in range(len(df_test)):\n    if wrong_test_03['actual_lable'][i]== np.argmax(predict[i], axis=-1):\n        count1+=1\n    else:\n        count2+=1\nprint(count1,count2)\nfrom sklearn.metrics import classification_report\nprint(classification_report(df_test['actual_lable'], df_test['predict'], target_names = data_label))\n\n","metadata":{"execution":{"iopub.status.busy":"2022-05-23T18:53:49.692687Z","iopub.execute_input":"2022-05-23T18:53:49.693234Z","iopub.status.idle":"2022-05-23T18:53:49.721686Z","shell.execute_reply.started":"2022-05-23T18:53:49.693195Z","shell.execute_reply":"2022-05-23T18:53:49.720725Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Predict","metadata":{}},{"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator,load_img\nfrom tensorflow.keras.utils import to_categorical\nfrom sklearn.model_selection import train_test_split\nimport matplotlib.pyplot as plt\nimport random\nimport os\nimport tensorflow as tf\nfrom tensorflow import keras\nfrom tensorflow.keras import layers\nfrom tqdm import tqdm\nimport time\nimport cv2\n\n#Load test data set\ndf_test=pd.read_csv('../input/data-csv/df_test.csv')\n\n# Define parameters\nImage_Width=32\nImage_Height=32\nImage_Size=(Image_Width,Image_Height)\nImage_Channels=3\nbatch_size=128\n#Processing data\nprint('Processing data ...')\ntest_datagen = ImageDataGenerator(rescale=1./255)\ntest_generator = test_datagen.flow_from_dataframe(df_test,  \"kaggle/working/temp/train/\",\\\n    x_col='id',y_col='label',shuffle=False,target_size=Image_Size, \\\n        class_mode='categorical', batch_size=batch_size )\n\nImage_Width=71\nImage_Height=71\nImage_Size=(Image_Width,Image_Height)\nImage_Channels=3\nbatch_size=128\n#Processing data\nprint('Processing data ...')\ntest_generator2 = test_datagen.flow_from_dataframe(df_test,  \"kaggle/working/temp/train/\",\\\n    x_col='id',y_col='label',shuffle=False,target_size=Image_Size, \\\n        class_mode='categorical', batch_size=batch_size )","metadata":{"execution":{"iopub.status.busy":"2022-05-24T06:10:40.458356Z","iopub.execute_input":"2022-05-24T06:10:40.458587Z","iopub.status.idle":"2022-05-24T06:10:40.589125Z","shell.execute_reply.started":"2022-05-24T06:10:40.458555Z","shell.execute_reply":"2022-05-24T06:10:40.588263Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Load model\nprint('Loading model ...')\nmodel=keras.models.load_model(\"../input/data-csv/model_real.h5\")\nmodel2=keras.models.load_model('../input/data-csv/best_weights_xception_acc_model.h5')\n#Predict \nprint('Predicting data ...')\nstart=time.time()\npredict1 = model.predict(test_generator)\ntime2=time.time()\nprint(' Time predict :',time2-start ,'s')\npredict2 = model2.predict(test_generator2)\nend=time.time()\nprint(' Time predict :',end-time2 ,'s')","metadata":{"execution":{"iopub.status.busy":"2022-05-24T06:12:53.723232Z","iopub.execute_input":"2022-05-24T06:12:53.724028Z","iopub.status.idle":"2022-05-24T06:13:05.357194Z","shell.execute_reply.started":"2022-05-24T06:12:53.723958Z","shell.execute_reply":"2022-05-24T06:13:05.356207Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"count1=0\ncount2=0\ncount3=0\ncount4=0\npredict=[]\ndf_test['actual_lable'] =  test_generator.classes\nfor i in range(len(df_test)):\n    if df_test['actual_lable'][i]== np.argmax(predict1[i], axis=-1):\n        count1+=1\n        if np.max(predict1[i]) >= 0.3:\n            count2+=1\n            predict.append(np.argmax(predict1[i]))\n        elif df_test['actual_lable'][i]== np.argmax(predict2[i], axis=-1):\n            count3+=1\n            predict.append(np.argmax(predict2[i]))\n        else:\n            count4+=1\n    elif df_test['actual_lable'][i]== np.argmax(predict2[i], axis=-1):\n        count3+=1\n    else:\n        count4+=1\nprint('Số ảnh dự đoán đúng của model custom là: ',count2)\nprint('Số ảnh dự đoán đúng của model xception là: ',count3)\nprint('Số ảnh dự đoán sai là: ',count4)\ncount1,count2,count3,count4,(count2+count3)/5000","metadata":{"execution":{"iopub.status.busy":"2022-05-24T06:11:02.091039Z","iopub.execute_input":"2022-05-24T06:11:02.091244Z","iopub.status.idle":"2022-05-24T06:11:02.493816Z","shell.execute_reply.started":"2022-05-24T06:11:02.091218Z","shell.execute_reply":"2022-05-24T06:11:02.492823Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"len(predict)","metadata":{"execution":{"iopub.status.busy":"2022-05-23T16:29:59.55309Z","iopub.execute_input":"2022-05-23T16:29:59.555733Z","iopub.status.idle":"2022-05-23T16:29:59.562028Z","shell.execute_reply.started":"2022-05-23T16:29:59.555689Z","shell.execute_reply":"2022-05-23T16:29:59.561076Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"predict=[]\nfor i in range(len(df_test)):\n  if np.max(predict1[i])>=0.3:\n    predict.append(np.argmax(predict1[i], axis=-1))\n  else:\n    predict.append(np.argmax(predict2[i], axis=-1))\n\n#Etestuate model\ndf_test['actual_lable'] =  test_generator.classes\n# df_test['predict'] = np.argmax(predict, axis=-1)\ndf_test['predict'] =pd.DataFrame(predict)\ncount=0\nfor i in range(len(df_test)):\n  if df_test['actual_lable'][i]== df_test['predict'][i]:\n    count+=1\nprint('so anh du doan dung la: ',count)\nprint('ACC: ',count/5000)\ndata_label=[]\nfor k,v in test_generator.class_indices.items():\n  data_label.append(str(k))\n##F1 score\nfrom sklearn.metrics import classification_report\nprint(classification_report(df_test['actual_lable'], \\\n    df_test['predict'], target_names = data_label))\n##Confusion matrix\n# CREATE CONFUSION MATRIX OF ACTUAL VS. PREDICTION \nfrom sklearn.metrics import confusion_matrix\ncm = confusion_matrix(df_test['actual_lable'], df_test['predict'])\nplt.figure(figsize = (8, 5))\ncm = pd.DataFrame(cm , index = data_label , columns = data_label)\nimport seaborn as sns\nax = sns.heatmap(cm, linecolor='white', cmap='Blues', linewidth=1, annot=True, fmt='')\nbottom, top = ax.get_ylim()\nax.set_ylim(bottom + 0.5, top - 0.5)\nplt.title('Confusion Matrix', size=20)\nplt.xlabel('Predicted Labels', size=14)\nplt.ylabel('Actual Labels', size=14)\nplt.savefig('Initial_Model_Confusion_Matrix.png')\nplt.show()\nprint(0)","metadata":{"execution":{"iopub.status.busy":"2022-05-24T06:11:02.495323Z","iopub.execute_input":"2022-05-24T06:11:02.495731Z","iopub.status.idle":"2022-05-24T06:11:03.595281Z","shell.execute_reply.started":"2022-05-24T06:11:02.495684Z","shell.execute_reply":"2022-05-24T06:11:03.594591Z"},"trusted":true},"execution_count":null,"outputs":[]}]}