{"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\nfrom glob import glob\nimport re\nimport shutil\nimport pandas as pd\nfrom PIL import Image\nimport os\nfrom py7zr import unpack_7zarchive\nfrom glob import glob\nimport pandas as pd\nimport tensorflow as tf\nfrom tensorflow.keras.preprocessing.image import load_img, ImageDataGenerator\nfrom tensorflow.keras import datasets, layers, models\nfrom tensorflow.keras.regularizers import l2\nimport matplotlib.pyplot as plt\nimport numpy as np","metadata":{"execution":{"iopub.status.busy":"2021-10-16T13:15:57.850266Z","iopub.execute_input":"2021-10-16T13:15:57.850823Z","iopub.status.idle":"2021-10-16T13:16:05.159668Z","shell.execute_reply.started":"2021-10-16T13:15:57.850784Z","shell.execute_reply":"2021-10-16T13:16:05.15875Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"shutil.register_unpack_format('7zip', ['.7z'], unpack_7zarchive)\nshutil.unpack_archive('../input/cifar-10/train.7z')\nshutil.unpack_archive('../input/cifar-10/test.7z')","metadata":{"execution":{"iopub.status.busy":"2021-10-16T12:20:55.950955Z","iopub.execute_input":"2021-10-16T12:20:55.951204Z","iopub.status.idle":"2021-10-16T12:35:49.074297Z","shell.execute_reply.started":"2021-10-16T12:20:55.951177Z","shell.execute_reply":"2021-10-16T12:35:49.07355Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_dir = os.listdir('./train')\ntrain_dir_len = len(train_dir)\n","metadata":{"execution":{"iopub.status.busy":"2021-10-16T13:16:09.222816Z","iopub.execute_input":"2021-10-16T13:16:09.223205Z","iopub.status.idle":"2021-10-16T13:16:09.268331Z","shell.execute_reply.started":"2021-10-16T13:16:09.223168Z","shell.execute_reply":"2021-10-16T13:16:09.267367Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\ntrain_labels = pd.read_csv('../input/cifar-10/trainLabels.csv')\ntrain_images = pd.DataFrame(columns=['id', 'label', 'path'], dtype=str)\ntest_labels = pd.read_csv('../input/cifar-10/sampleSubmission.csv')\ntrain_root = './train/'\nfor i in range(0, train_dir_len):\n    path = path = train_root + str(i+1) + '.png'\n    if os.path.exists(path):\n        train_images = train_images.append([{\n            'id': train_labels['id'].iloc[i], 'label': train_labels['label'].iloc[i], 'path': str(i+1) + '.png' \n        }])\nsize_img = 32\nb_size = 64\nquantity_classes = train_images['label'].unique().size\nclasses = ['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']\n\nfor n in classes:\n    index = classes.index(n)\n    train_images.loc[train_images['label'] == n, 'label'] = str(index)\n","metadata":{"execution":{"iopub.status.busy":"2021-10-16T13:16:12.450355Z","iopub.execute_input":"2021-10-16T13:16:12.450623Z","iopub.status.idle":"2021-10-16T13:17:49.083013Z","shell.execute_reply.started":"2021-10-16T13:16:12.450591Z","shell.execute_reply":"2021-10-16T13:17:49.082273Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"execution":{"iopub.status.busy":"2021-10-16T12:54:34.581125Z","iopub.execute_input":"2021-10-16T12:54:34.581371Z","iopub.status.idle":"2021-10-16T12:54:34.593832Z","shell.execute_reply.started":"2021-10-16T12:54:34.581343Z","shell.execute_reply":"2021-10-16T12:54:34.592878Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data_generator = ImageDataGenerator(rescale=1/255.,\n                                   validation_split=0.2,\n                                   horizontal_flip=True)\n\ntrain_generator = data_generator.flow_from_dataframe(dataframe=train_images, \n                                                    directory='./train/',\n                                                    x_col='path',\n                                                     y_col='label',\n                                                     subset='training',\n                                                     batch_size=b_size,\n                                                     shuffle=True,\n                                                     target_size=(size_img,size_img),\n                                                     class_mode='categorical')\n\nvalidation_generator = data_generator.flow_from_dataframe(dataframe=train_images,\n                                                         directory='./train/',\n                                                         x_col='path',\n                                                         y_col='label',\n                                                         subset='validation',\n                                                         batch_size=b_size,\n                                                         shuffle=True,\n                                                         target_size=(size_img,size_img),\n                                                         class_mode='categorical')","metadata":{"execution":{"iopub.status.busy":"2021-10-16T13:18:06.826173Z","iopub.execute_input":"2021-10-16T13:18:06.826431Z","iopub.status.idle":"2021-10-16T13:18:07.605166Z","shell.execute_reply.started":"2021-10-16T13:18:06.826402Z","shell.execute_reply":"2021-10-16T13:18:07.604262Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"cnn = models.Sequential()\ncnn.add(layers.Conv2D(32, (3, 3), padding='same',\n                 input_shape=(size_img, size_img, 3)))\ncnn.add(layers.Activation('relu'))\ncnn.add(layers.BatchNormalization())\ncnn.add(layers.Conv2D(32, (3, 3)))\ncnn.add(layers.Activation('relu'))\ncnn.add(layers.BatchNormalization())\ncnn.add(layers.MaxPooling2D(pool_size=(2, 2)))\ncnn.add(layers.Dropout(0.25))\n\ncnn.add(layers.Conv2D(64, (3, 3), padding='same'))\ncnn.add(layers.Activation('relu'))\ncnn.add(layers.BatchNormalization())\ncnn.add(layers.Conv2D(64, (3, 3)))\ncnn.add(layers.Activation('relu'))\ncnn.add(layers.BatchNormalization())\ncnn.add(layers.MaxPooling2D(pool_size=(2, 2)))\ncnn.add(layers.Dropout(0.25))\n\ncnn.add(layers.Flatten())\ncnn.add(layers.Dense(256, kernel_regularizer=l2(0.01)))\ncnn.add(layers.Activation('relu'))\ncnn.add(layers.Dropout(0.3))\ncnn.add(layers.Dense(quantity_classes))\ncnn.add(layers.Activation('softmax'))\n\ncnn.compile(optimizer='adam', loss = 'categorical_crossentropy', metrics=['accuracy'])\ncnn.summary()","metadata":{"execution":{"iopub.status.busy":"2021-10-16T13:18:11.351205Z","iopub.execute_input":"2021-10-16T13:18:11.351956Z","iopub.status.idle":"2021-10-16T13:18:11.494429Z","shell.execute_reply.started":"2021-10-16T13:18:11.351901Z","shell.execute_reply":"2021-10-16T13:18:11.492409Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#history = cnn.fit(train_generator, epochs = 50,  validation_data=validation_generator)\nhistory = cnn.fit(train_generator, \n                    epochs= 50,\n                    validation_data=validation_generator,\n                    shuffle = True\n                   )","metadata":{"execution":{"iopub.status.busy":"2021-10-16T13:18:15.255213Z","iopub.execute_input":"2021-10-16T13:18:15.256198Z","iopub.status.idle":"2021-10-16T13:31:34.682036Z","shell.execute_reply.started":"2021-10-16T13:18:15.256144Z","shell.execute_reply":"2021-10-16T13:31:34.681289Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.plot(history.history['accuracy'])\nplt.title('model accuracy')\nplt.ylabel('accuracy')\nplt.xlabel('epoch')\nplt.show()\n\n\nplt.plot(history.history['val_accuracy'])\nplt.title('model val_accuracy')\nplt.ylabel('val_accuracy')\nplt.xlabel('epoch')\nplt.show()\n\n\nplt.plot(history.history['loss'])\nplt.title('model loss')\nplt.ylabel('loss')\nplt.xlabel('epoch')\nplt.show()\n\n\nplt.plot(history.history['val_loss'])\nplt.title('model val_loss')\nplt.ylabel('val_loss')\nplt.xlabel('epoch')\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2021-10-16T13:31:36.910439Z","iopub.execute_input":"2021-10-16T13:31:36.910983Z","iopub.status.idle":"2021-10-16T13:31:37.625861Z","shell.execute_reply.started":"2021-10-16T13:31:36.910945Z","shell.execute_reply":"2021-10-16T13:31:37.625198Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!mkdir ./data/\n!mv ./test ./data","metadata":{"execution":{"iopub.status.busy":"2021-10-16T13:32:01.432172Z","iopub.execute_input":"2021-10-16T13:32:01.432438Z","iopub.status.idle":"2021-10-16T13:32:02.876321Z","shell.execute_reply.started":"2021-10-16T13:32:01.432409Z","shell.execute_reply":"2021-10-16T13:32:02.875316Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_data_generator = ImageDataGenerator(rescale=1./255.)\ntest_generator = test_data_generator.flow_from_directory(directory='./data',\n            batch_size=b_size,\n            shuffle=False,color_mode='rgb',\n            target_size=(size_img,size_img),\n            class_mode=None)","metadata":{"execution":{"iopub.status.busy":"2021-10-16T13:32:15.85927Z","iopub.execute_input":"2021-10-16T13:32:15.859581Z","iopub.status.idle":"2021-10-16T13:32:24.368209Z","shell.execute_reply.started":"2021-10-16T13:32:15.859539Z","shell.execute_reply":"2021-10-16T13:32:24.367316Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"prediction = cnn.predict(test_generator)\nprediction = np.argmax(prediction, axis=1)\nsubmission = pd.DataFrame(columns=['id', 'label'], dtype=str)\nsubmission['label'] = [classes[int(i)] for i in prediction]\nsubmission['id'] = [ (''.join(filter(str.isdigit, name ))) for name in test_generator.filenames]\n\nsubmission.sort_values(by=['id'])","metadata":{"execution":{"iopub.status.busy":"2021-10-16T13:33:02.560935Z","iopub.execute_input":"2021-10-16T13:33:02.56141Z","iopub.status.idle":"2021-10-16T13:34:22.995267Z","shell.execute_reply.started":"2021-10-16T13:33:02.56137Z","shell.execute_reply":"2021-10-16T13:34:22.994515Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%rm -rf ./train\n%rm -rf ./data","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission.to_csv('my_submission.csv', index=False)","metadata":{"execution":{"iopub.status.busy":"2021-10-16T13:34:45.513325Z","iopub.execute_input":"2021-10-16T13:34:45.513606Z","iopub.status.idle":"2021-10-16T13:34:46.025057Z","shell.execute_reply.started":"2021-10-16T13:34:45.513577Z","shell.execute_reply":"2021-10-16T13:34:46.024299Z"},"trusted":true},"execution_count":null,"outputs":[]}]}