{"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":"#1: import some necessary libraries\nimport numpy as np\nimport matplotlib.pyplot as plt\nfrom keras.models import Sequential\nfrom keras.layers import Dense, Dropout, Activation, Flatten\nfrom keras.layers import Conv2D, MaxPooling2D\nfrom keras.utils import np_utils\nfrom keras.datasets import mnist\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport matplotlib as mlt\nimport seaborn as sns\n","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2022-11-29T03:51:27.925335Z","iopub.execute_input":"2022-11-29T03:51:27.925789Z","iopub.status.idle":"2022-11-29T03:51:27.931467Z","shell.execute_reply.started":"2022-11-29T03:51:27.92575Z","shell.execute_reply":"2022-11-29T03:51:27.930644Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#2: load data\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n","metadata":{"execution":{"iopub.status.busy":"2022-11-29T03:51:27.932833Z","iopub.execute_input":"2022-11-29T03:51:27.933276Z","iopub.status.idle":"2022-11-29T03:51:27.956628Z","shell.execute_reply.started":"2022-11-29T03:51:27.933236Z","shell.execute_reply":"2022-11-29T03:51:27.955167Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train = pd.read_csv(\"/kaggle/input/aiforcegen3-challenge1/train.csv\")\nprint(train.shape)\ntest = pd.read_csv(\"/kaggle/input/aiforcegen3-challenge1/test.csv\")\nprint(test.shape)","metadata":{"execution":{"iopub.status.busy":"2022-11-29T03:51:27.958974Z","iopub.execute_input":"2022-11-29T03:51:27.959685Z","iopub.status.idle":"2022-11-29T03:51:33.287241Z","shell.execute_reply.started":"2022-11-29T03:51:27.959634Z","shell.execute_reply":"2022-11-29T03:51:33.286062Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.head()","metadata":{"execution":{"iopub.status.busy":"2022-11-29T03:51:33.289189Z","iopub.execute_input":"2022-11-29T03:51:33.289642Z","iopub.status.idle":"2022-11-29T03:51:33.315898Z","shell.execute_reply.started":"2022-11-29T03:51:33.289604Z","shell.execute_reply":"2022-11-29T03:51:33.313807Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_train = train[\"label\"]\nX_train = train.drop(labels = [\"label\"], axis = 1)","metadata":{"execution":{"iopub.status.busy":"2022-11-29T03:51:33.317567Z","iopub.execute_input":"2022-11-29T03:51:33.317917Z","iopub.status.idle":"2022-11-29T03:51:33.58524Z","shell.execute_reply.started":"2022-11-29T03:51:33.317883Z","shell.execute_reply":"2022-11-29T03:51:33.583734Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize = (15, 7))\ng = sns.countplot(y_train, palette = \"icefire\")\nplt.title(\"Number of digit classes\")\nprint(\" \\t # y_train value counts # \\n\", y_train.value_counts())","metadata":{"execution":{"iopub.status.busy":"2022-11-29T03:51:33.586604Z","iopub.execute_input":"2022-11-29T03:51:33.586913Z","iopub.status.idle":"2022-11-29T03:51:33.804977Z","shell.execute_reply.started":"2022-11-29T03:51:33.586881Z","shell.execute_reply":"2022-11-29T03:51:33.803291Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train = X_train / 255.0\nX_test = test / 255.0","metadata":{"execution":{"iopub.status.busy":"2022-11-29T03:51:33.806353Z","iopub.execute_input":"2022-11-29T03:51:33.80666Z","iopub.status.idle":"2022-11-29T03:51:33.932068Z","shell.execute_reply.started":"2022-11-29T03:51:33.806629Z","shell.execute_reply":"2022-11-29T03:51:33.931028Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_test = X_test.values.reshape(-1,28,28,1)\nX_train = X_train.values.reshape(-1,28,28,1)","metadata":{"execution":{"iopub.status.busy":"2022-11-29T03:51:33.934379Z","iopub.execute_input":"2022-11-29T03:51:33.935166Z","iopub.status.idle":"2022-11-29T03:51:33.940181Z","shell.execute_reply.started":"2022-11-29T03:51:33.935125Z","shell.execute_reply":"2022-11-29T03:51:33.93943Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from keras.utils.np_utils import to_categorical # convert to one-hot-encoding\nY_train = to_categorical(y_train, num_classes = 10)","metadata":{"execution":{"iopub.status.busy":"2022-11-29T03:51:33.941882Z","iopub.execute_input":"2022-11-29T03:51:33.942427Z","iopub.status.idle":"2022-11-29T03:51:33.956347Z","shell.execute_reply.started":"2022-11-29T03:51:33.942391Z","shell.execute_reply":"2022-11-29T03:51:33.955473Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.model_selection import train_test_split\nX_train, X_val, Y_train, Y_val = train_test_split(X_train, Y_train, test_size = 0.1, random_state=2)\nprint(\"x_train shape\",X_train.shape)\nprint(\"x_val shape\",X_val.shape)\nprint(\"y_train shape\",Y_train.shape)\nprint(\"y_val shape\",Y_val.shape)","metadata":{"execution":{"iopub.status.busy":"2022-11-29T03:51:33.957833Z","iopub.execute_input":"2022-11-29T03:51:33.958394Z","iopub.status.idle":"2022-11-29T03:51:34.910172Z","shell.execute_reply.started":"2022-11-29T03:51:33.958356Z","shell.execute_reply":"2022-11-29T03:51:34.908848Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.metrics import confusion_matrix\nimport itertools\n\nfrom keras.utils.np_utils import to_categorical # convert to one-hot-encoding\nfrom keras.models import Sequential\nfrom keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPool2D\nfrom keras.optimizers import RMSprop,Adam\nfrom keras.preprocessing.image import ImageDataGenerator\nfrom keras.callbacks import ReduceLROnPlateau\n\nmodel = Sequential()\n\nmodel.add(Conv2D(filters = 8, kernel_size = (5,5),padding = 'Same', \n                 activation = 'relu', input_shape = (28,28,1)))\n#filter: số lớp Conv, padding: tạo vòng 0 quanh model, 28 28: kích thước, 1: 1 chiều sâu\nmodel.add(MaxPool2D(pool_size = (2,2)))\n#pool_size: kích thước ma trận pooling\nmodel.add(Dropout(0.25))\n#dropout: loại bỏ một phần dữ liệu\nmodel.add(Conv2D(filters = 16, kernel_size = (3,3),padding = 'Same', \n                 activation ='relu'))\nmodel.add(MaxPool2D(pool_size = (2,2), strides = (2,2)))\nmodel.add(Dropout(0.25))\n\n# fully connected\nmodel.add(Flatten())\nmodel.add(Dense(256, activation = \"relu\"))\nmodel.add(Dropout(0.5))\nmodel.add(Dense(10, activation = \"softmax\"))\nmodel.summary()","metadata":{"execution":{"iopub.status.busy":"2022-11-29T03:51:34.911583Z","iopub.execute_input":"2022-11-29T03:51:34.911885Z","iopub.status.idle":"2022-11-29T03:51:34.989652Z","shell.execute_reply.started":"2022-11-29T03:51:34.911855Z","shell.execute_reply":"2022-11-29T03:51:34.988556Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"optimizer = Adam(lr = 0.0005, beta_1 = 0.9, beta_2 = 0.999)\nmodel.compile(optimizer = optimizer , loss = \"categorical_crossentropy\", metrics = [\"accuracy\"])\nepochs = 30  \nbatch_size = 250","metadata":{"execution":{"iopub.status.busy":"2022-11-29T03:51:34.991668Z","iopub.execute_input":"2022-11-29T03:51:34.992175Z","iopub.status.idle":"2022-11-29T03:51:35.00729Z","shell.execute_reply.started":"2022-11-29T03:51:34.992126Z","shell.execute_reply":"2022-11-29T03:51:35.005908Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"datagen = ImageDataGenerator(\n        featurewise_center=False,  \n        samplewise_center=False, \n        featurewise_std_normalization=False,  \n        samplewise_std_normalization=False,  \n        zca_whitening=False, \n        rotation_range=5,  \n        zoom_range = 0.1, \n        width_shift_range=0.1,  \n        height_shift_range=0.1,  \n        horizontal_flip=False,  \n        vertical_flip=False)  \n\ndatagen.fit(X_train)","metadata":{"execution":{"iopub.status.busy":"2022-11-29T03:51:35.008684Z","iopub.execute_input":"2022-11-29T03:51:35.00909Z","iopub.status.idle":"2022-11-29T03:51:35.187505Z","shell.execute_reply.started":"2022-11-29T03:51:35.009027Z","shell.execute_reply":"2022-11-29T03:51:35.185971Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from tensorflow.keras.callbacks import EarlyStopping\nearly_stopping = EarlyStopping(monitor='val_loss', mode='min', verbose=1,patience=6)\nhistory = model.fit_generator(datagen.flow(X_train,Y_train, batch_size=batch_size),\n                              epochs = epochs, validation_data = (X_val,Y_val), steps_per_epoch=X_train.shape[0] // batch_size,\n                              callbacks=[early_stopping])","metadata":{"execution":{"iopub.status.busy":"2022-11-29T03:51:35.189025Z","iopub.execute_input":"2022-11-29T03:51:35.189393Z","iopub.status.idle":"2022-11-29T04:03:51.236221Z","shell.execute_reply.started":"2022-11-29T03:51:35.189357Z","shell.execute_reply":"2022-11-29T04:03:51.234698Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(\"Accuracy of the model is --> \" , model.evaluate(X_val, Y_val, batch_size=batch_size)[1]*100 , \"%\")\nprint(\"Loss of the model is --> \" , model.evaluate(X_val, Y_val, batch_size=batch_size)[0])","metadata":{"execution":{"iopub.status.busy":"2022-11-29T04:03:51.238439Z","iopub.execute_input":"2022-11-29T04:03:51.238811Z","iopub.status.idle":"2022-11-29T04:03:52.734454Z","shell.execute_reply.started":"2022-11-29T04:03:51.238772Z","shell.execute_reply":"2022-11-29T04:03:52.732532Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"labels = model.predict(X_test)\nlabels.shape","metadata":{"execution":{"iopub.status.busy":"2022-11-29T04:03:52.736201Z","iopub.execute_input":"2022-11-29T04:03:52.736553Z","iopub.status.idle":"2022-11-29T04:03:54.668555Z","shell.execute_reply.started":"2022-11-29T04:03:52.736518Z","shell.execute_reply":"2022-11-29T04:03:54.66719Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"labels = np.argmax(labels, axis=1)\nlabels.shape","metadata":{"execution":{"iopub.status.busy":"2022-11-29T04:03:54.670029Z","iopub.execute_input":"2022-11-29T04:03:54.670486Z","iopub.status.idle":"2022-11-29T04:03:54.678482Z","shell.execute_reply.started":"2022-11-29T04:03:54.67045Z","shell.execute_reply":"2022-11-29T04:03:54.677372Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission = pd.read_csv(\"../input/aiforcegen3-challenge1/sample.csv\")\nsubmission","metadata":{"execution":{"iopub.status.busy":"2022-11-29T04:03:54.679982Z","iopub.execute_input":"2022-11-29T04:03:54.680423Z","iopub.status.idle":"2022-11-29T04:03:54.718859Z","shell.execute_reply.started":"2022-11-29T04:03:54.680357Z","shell.execute_reply":"2022-11-29T04:03:54.71747Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df.to_csv('submission.csv', index = False)\nindex = test.index.values\ndata = {'ImageId' : index, 'Label' : labels}\ndf = pd.DataFrame(data = data)\ndf.head()\nsubmit = pd.DataFrame({'ImageId' : index, 'Label' : labels.astype(int).ravel()})\nsubmit.to_csv(\"submission.csv\",index = False)\nsubmit","metadata":{"execution":{"iopub.status.busy":"2022-11-29T04:09:39.860087Z","iopub.execute_input":"2022-11-29T04:09:39.860515Z","iopub.status.idle":"2022-11-29T04:09:39.898646Z","shell.execute_reply.started":"2022-11-29T04:09:39.860475Z","shell.execute_reply":"2022-11-29T04:09:39.896594Z"},"trusted":true},"execution_count":null,"outputs":[]}]}