{"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":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2023-01-25T20:22:04.479429Z","iopub.execute_input":"2023-01-25T20:22:04.480518Z","iopub.status.idle":"2023-01-25T20:22:04.490530Z","shell.execute_reply.started":"2023-01-25T20:22:04.480468Z","shell.execute_reply":"2023-01-25T20:22:04.489359Z"},"trusted":true},"execution_count":null,"outputs":[]},{"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 os\nfrom tensorflow import keras\nimport tensorflow as tf\nfrom keras import Sequential\nfrom keras.layers import Dense, Conv2D, MaxPooling2D, Activation, BatchNormalization, Flatten, Dropout\nfrom keras.utils.np_utils import to_categorical\nfrom keras.preprocessing.image import ImageDataGenerator","metadata":{"execution":{"iopub.status.busy":"2023-01-25T20:22:04.640225Z","iopub.execute_input":"2023-01-25T20:22:04.640892Z","iopub.status.idle":"2023-01-25T20:22:04.646780Z","shell.execute_reply.started":"2023-01-25T20:22:04.640858Z","shell.execute_reply":"2023-01-25T20:22:04.645675Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Read the data from .ZIP form","metadata":{}},{"cell_type":"code","source":"os.getcwd()","metadata":{"execution":{"iopub.status.busy":"2023-01-25T20:22:05.036917Z","iopub.execute_input":"2023-01-25T20:22:05.037765Z","iopub.status.idle":"2023-01-25T20:22:05.045520Z","shell.execute_reply.started":"2023-01-25T20:22:05.037722Z","shell.execute_reply":"2023-01-25T20:22:05.044273Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!pip install py7zr","metadata":{"execution":{"iopub.status.busy":"2023-01-25T20:22:05.214958Z","iopub.execute_input":"2023-01-25T20:22:05.215471Z","iopub.status.idle":"2023-01-25T20:22:15.936811Z","shell.execute_reply.started":"2023-01-25T20:22:05.215429Z","shell.execute_reply":"2023-01-25T20:22:15.935553Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from py7zr import unpack_7zarchive\nimport shutil\n\n#shutil.register_unpack_format('7zip',['.7z'],unpack_7zarchive)","metadata":{"execution":{"iopub.status.busy":"2023-01-25T20:22:15.939455Z","iopub.execute_input":"2023-01-25T20:22:15.939822Z","iopub.status.idle":"2023-01-25T20:22:15.945582Z","shell.execute_reply.started":"2023-01-25T20:22:15.939788Z","shell.execute_reply":"2023-01-25T20:22:15.944433Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"shutil.unpack_archive('../input/cifar-10/train.7z', '/kaggle/temp/')","metadata":{"execution":{"iopub.status.busy":"2023-01-25T20:22:15.947030Z","iopub.execute_input":"2023-01-25T20:22:15.947429Z","iopub.status.idle":"2023-01-25T20:23:06.827579Z","shell.execute_reply.started":"2023-01-25T20:22:15.947353Z","shell.execute_reply":"2023-01-25T20:23:06.826119Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Unziping the train data","metadata":{}},{"cell_type":"code","source":"train_labels = pd.read_csv(\"../input/cifar-10/trainLabels.csv\", header=\"infer\")\n\nclasses = train_labels['label'].unique()\nprint(classes)","metadata":{"execution":{"iopub.status.busy":"2023-01-25T20:23:06.831399Z","iopub.execute_input":"2023-01-25T20:23:06.832120Z","iopub.status.idle":"2023-01-25T20:23:06.892370Z","shell.execute_reply.started":"2023-01-25T20:23:06.832063Z","shell.execute_reply":"2023-01-25T20:23:06.890948Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"if not os.path.exists(\"/kaggle/temp/valid\"):\n    os.mkdir(\"/kaggle/temp/valid\")\n    \nparent_path_train = \"/kaggle/temp/train\"\nparent_path_valid = \"/kaggle/temp/valid\"\nparent_path_test = \"/kaggle/temp/test\"\n\nfor class1 in classes:\n    path_train = os.path.join(parent_path_train,class1)\n    if not os.path.exists(path_train):\n        os.mkdir(path_train)\n    path_valid = os.path.join(parent_path_valid,class1)\n    if not os.path.exists(path_valid):\n        os.mkdir(path_valid)\n        \nfor (int_ind,row) in train_labels.iterrows():\n    id = str(row[\"id\"])+\".png\"\n    source_path = os.path.join(parent_path_train,id)\n    \n    p=np.random.random()\n    if p<=0.8:\n        target_path = os.path.join(parent_path_train,row[\"label\"],id)\n        os.replace(source_path, target_path)\n    else:\n        target_path = os.path.join(parent_path_valid,row[\"label\"],id)\n        os.replace(source_path, target_path)","metadata":{"execution":{"iopub.status.busy":"2023-01-25T20:23:06.895081Z","iopub.execute_input":"2023-01-25T20:23:06.896418Z","iopub.status.idle":"2023-01-25T20:23:13.498758Z","shell.execute_reply.started":"2023-01-25T20:23:06.896341Z","shell.execute_reply":"2023-01-25T20:23:13.497541Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!ls /kaggle/temp/valid\n!ls /kaggle/temp/train","metadata":{"execution":{"iopub.status.busy":"2023-01-25T20:23:13.500502Z","iopub.execute_input":"2023-01-25T20:23:13.501239Z","iopub.status.idle":"2023-01-25T20:23:16.024889Z","shell.execute_reply.started":"2023-01-25T20:23:13.501188Z","shell.execute_reply":"2023-01-25T20:23:16.023301Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Visualization training data from Keras Cifar10 for CNN","metadata":{}},{"cell_type":"code","source":"# Load the CIFAR-10 dataset\nfrom keras.datasets import cifar10\nimport tensorflow as tf\n\n(x_train, y_train), (x_test, y_test) = cifar10.load_data()\n\n# Plot the first 10 images from the training set\nimport matplotlib.pyplot as plt\nfig, axes = plt.subplots(2, 5, figsize=(10, 5))\naxes = axes.ravel()\nfor i in range(10):\n    axes[i].imshow(x_train[i])\n    axes[i].set_title(y_train[i])\n    axes[i].axis('off')\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2023-01-25T20:23:16.027547Z","iopub.execute_input":"2023-01-25T20:23:16.028033Z","iopub.status.idle":"2023-01-25T20:23:21.051738Z","shell.execute_reply.started":"2023-01-25T20:23:16.027987Z","shell.execute_reply":"2023-01-25T20:23:21.050672Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"x_train.shape","metadata":{"execution":{"iopub.status.busy":"2023-01-25T20:23:21.053329Z","iopub.execute_input":"2023-01-25T20:23:21.054204Z","iopub.status.idle":"2023-01-25T20:23:21.066175Z","shell.execute_reply.started":"2023-01-25T20:23:21.054165Z","shell.execute_reply":"2023-01-25T20:23:21.064954Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_train.shape","metadata":{"execution":{"iopub.status.busy":"2023-01-25T20:23:21.067897Z","iopub.execute_input":"2023-01-25T20:23:21.069063Z","iopub.status.idle":"2023-01-25T20:23:21.212145Z","shell.execute_reply.started":"2023-01-25T20:23:21.069025Z","shell.execute_reply":"2023-01-25T20:23:21.206315Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Train data preprocessing for CNN","metadata":{}},{"cell_type":"code","source":"y_train_categorical = tf.keras.utils.to_categorical(y_train, 10)\ny_train_categorical[0]\n\nx_train_reshaped = x_train.reshape(-1, 32, 32, 3)\nx_train_reshaped.shape","metadata":{"execution":{"iopub.status.busy":"2023-01-25T20:23:21.218060Z","iopub.execute_input":"2023-01-25T20:23:21.218362Z","iopub.status.idle":"2023-01-25T20:23:21.228652Z","shell.execute_reply.started":"2023-01-25T20:23:21.218335Z","shell.execute_reply":"2023-01-25T20:23:21.227643Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_train_categorical.sum(0)","metadata":{"execution":{"iopub.status.busy":"2023-01-25T20:23:21.230067Z","iopub.execute_input":"2023-01-25T20:23:21.231196Z","iopub.status.idle":"2023-01-25T20:23:21.241353Z","shell.execute_reply.started":"2023-01-25T20:23:21.231158Z","shell.execute_reply":"2023-01-25T20:23:21.240308Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"x_train[0][:3,:3] #shape 28,28","metadata":{"execution":{"iopub.status.busy":"2023-01-25T20:23:21.242899Z","iopub.execute_input":"2023-01-25T20:23:21.243885Z","iopub.status.idle":"2023-01-25T20:23:21.252661Z","shell.execute_reply.started":"2023-01-25T20:23:21.243848Z","shell.execute_reply":"2023-01-25T20:23:21.251431Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"x_train_reshaped[0][:3,:3] #shape 28,28,1","metadata":{"execution":{"iopub.status.busy":"2023-01-25T20:23:21.254491Z","iopub.execute_input":"2023-01-25T20:23:21.255575Z","iopub.status.idle":"2023-01-25T20:23:21.262954Z","shell.execute_reply.started":"2023-01-25T20:23:21.255536Z","shell.execute_reply":"2023-01-25T20:23:21.261791Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Test data","metadata":{}},{"cell_type":"code","source":"y_test_categorical = tf.keras.utils.to_categorical(y_test, 10)\ny_train_categorical[0]\n\nx_test_reshaped = x_test.astype('float32')\nx_test_reshaped.shape","metadata":{"execution":{"iopub.status.busy":"2023-01-25T20:23:21.264674Z","iopub.execute_input":"2023-01-25T20:23:21.265853Z","iopub.status.idle":"2023-01-25T20:23:21.450506Z","shell.execute_reply.started":"2023-01-25T20:23:21.265817Z","shell.execute_reply":"2023-01-25T20:23:21.449370Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Model Training preprocessing for CNN","metadata":{}},{"cell_type":"markdown","source":"## First basic CNN made manually- model1","metadata":{}},{"cell_type":"markdown","source":"- with batchnorm, MaxPool, Flatten, Dense output \n- with augmentation score in Kaggle leaderboard 0.64 in competition","metadata":{}},{"cell_type":"code","source":"import numpy as np\nimport random as python_random\n\npython_random.seed(123) #TOLE JE KOD, KTERÝ KDYŽ SPUSTÍM VÍCEKRÁT, VŽDY MÁM STEJNÉ VSTUPNÍ PODMÍNKY\nnp.random.seed(123)\ntf.random.set_seed(1234)\nimport os\nos.environ['PYTHONHASHSEED'] = '0' \n\n\nmodel1 = tf.keras.Sequential()\nmodel1.add(tf.keras.layers.Conv2D(filters=4, kernel_size=(3,3), activation='relu', input_shape=(32,32,3) ) )\nmodel1.add(tf.keras.layers.BatchNormalization())\nmodel1.add(tf.keras.layers.MaxPool2D(pool_size=(2, 2)))\n\nmodel1.add(tf.keras.layers.Conv2D(filters=32, kernel_size=(3,3)))\nmodel1.add(tf.keras.layers.BatchNormalization())\nmodel1.add(tf.keras.layers.ReLU())\n\nmodel1.add(tf.keras.layers.Conv2D(filters=64, kernel_size=(3,3)))\nmodel1.add(tf.keras.layers.BatchNormalization())\nmodel1.add(tf.keras.layers.ReLU())\n\nmodel1.add(tf.keras.layers.Conv2D(filters=128, kernel_size=(3,3)))\nmodel1.add(tf.keras.layers.BatchNormalization())\nmodel1.add(tf.keras.layers.ReLU())\n\nmodel1.add(tf.keras.layers.MaxPool2D(pool_size=(2, 2)))\n\nmodel1.add(tf.keras.layers.Flatten())\nmodel1.add(tf.keras.layers.Dense(10, activation='softmax' ))\n\nmodel1.compile(optimizer='adam', loss='CategoricalCrossentropy', metrics=['acc'])   \nmodel1.summary()\n\n","metadata":{"execution":{"iopub.status.busy":"2023-01-25T20:23:21.452062Z","iopub.execute_input":"2023-01-25T20:23:21.453371Z","iopub.status.idle":"2023-01-25T20:23:21.670770Z","shell.execute_reply.started":"2023-01-25T20:23:21.453328Z","shell.execute_reply":"2023-01-25T20:23:21.669621Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model1.fit(x_train_reshaped, y_train_categorical, validation_data=(x_test_reshaped, y_test_categorical),batch_size=64, epochs=32)","metadata":{"execution":{"iopub.status.busy":"2023-01-25T20:23:21.672460Z","iopub.execute_input":"2023-01-25T20:23:21.673148Z","iopub.status.idle":"2023-01-25T20:25:40.591623Z","shell.execute_reply.started":"2023-01-25T20:23:21.673108Z","shell.execute_reply":"2023-01-25T20:25:40.590615Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Second CNN with resiual joining manually (based on ResNet)- model2","metadata":{}},{"cell_type":"markdown","source":"- with residuals joining of layers, batchnorm, GlobalAveragePooling2D,  \n- with augmentation score in Kaggle leaderboard 0.8459 in competition","metadata":{}},{"cell_type":"code","source":"import numpy as np\nimport random as python_random\n\npython_random.seed(123) #TOLE JE KOD, KTERÝ KDYŽ SPUSTÍM VÍCEKRÁT, VŽDY MÁM STEJNÉ VSTUPNÍ PODMÍNKY\nnp.random.seed(123)\ntf.random.set_seed(1234)\nimport os\nos.environ['PYTHONHASHSEED'] = '0'\n\ninput_layer = tf.keras.layers.Input(shape=(32,32,3))\nx = input_layer #na vstupu mám tyto fotky\nx = tf.keras.layers.Normalization(mean=x_train_reshaped.mean(), variance=x_train_reshaped.var())(x) #FUNKCIONÁLNÍ API, \n\nfilters_l = [32,64,128,128] #pole počtu filtrů, vykonám loop tolikrát s různým nastavením filtrů\n\n#první konvoluce, na inicialzaci kernelu používám \"he_unform\", které jsou vhodné, \nx = tf.keras.layers.Conv2D(filters=filters_l[0], kernel_size=(3,3), kernel_initializer='he_uniform', activation='elu', padding='same')(x)\nfor i, filters in enumerate(filters_l): #postupně přes pole filters vytvářím vrstvy\n    if i != len(filters_l)-1:\n        downsample = True\n    else:\n        downsample = False\n    \n    res_con1 = x  \n    x = tf.keras.layers.BatchNormalization()(x) #batch normalizace\n    x = tf.keras.layers.ELU()(x)  #elu  poté konvoluce\n    x = tf.keras.layers.Conv2D(filters=filters, kernel_size=(3,3), kernel_initializer='he_uniform', padding='same' )(x)\n    x = tf.keras.layers.BatchNormalization()(x) \n    x = tf.keras.layers.ELU()(x) \n    x = tf.keras.layers.Conv2D(filters=filters, kernel_size=(3,3), kernel_initializer='he_uniform', padding='same' )(x)\n    x = tf.keras.layers.Add()([res_con1,x]) #reziduální spojení\n    \n    res_con2 = x  \n    x = tf.keras.layers.BatchNormalization()(x) \n    x = tf.keras.layers.ELU()(x) \n    x = tf.keras.layers.Conv2D(filters=filters, kernel_size=(3,3), kernel_initializer='he_uniform', padding='same' )(x)\n    x = tf.keras.layers.BatchNormalization()(x) \n    x = tf.keras.layers.ELU()(x) \n    x = tf.keras.layers.Conv2D(filters=filters, kernel_size=(3,3), kernel_initializer='he_uniform', padding='same' )(x)\n    x = tf.keras.layers.Add()([res_con1,res_con2,x])\n    \n    res_con3 = x  \n    x = tf.keras.layers.BatchNormalization()(x) \n    x = tf.keras.layers.ELU()(x) \n    x = tf.keras.layers.Conv2D(filters=filters, kernel_size=(3,3), kernel_initializer='he_uniform', padding='same' )(x)\n    x = tf.keras.layers.BatchNormalization()(x) \n    x = tf.keras.layers.ELU()(x) \n    x = tf.keras.layers.Conv2D(filters=filters, kernel_size=(3,3), kernel_initializer='he_uniform', padding='same' )(x)\n    x = tf.keras.layers.Add()([res_con1,res_con2,res_con3,x])\n    \n    res_con = x\n    if downsample: #downsampling, když stride je 2, což mi výstup 2xzmenší u convoluce, padding-same značí, že pokud není stride, tak výstup kovnoluce je stejný jako vstup\n        res_con = tf.keras.layers.BatchNormalization()(res_con)\n        res_con = tf.keras.layers.ELU()(res_con) \n        res_con = tf.keras.layers.Conv2D(filters=(filters if not downsample else filters_l[i+1]), kernel_size=(3,3), kernel_initializer='he_uniform', strides=2, padding='same' )(res_con)\n        \n     \n    x = tf.keras.layers.BatchNormalization()(x) \n    x = tf.keras.layers.ELU()(x) \n    x = tf.keras.layers.Conv2D(filters=filters, kernel_size=(3,3), kernel_initializer='he_uniform', padding='same' )(x)\n    x = tf.keras.layers.BatchNormalization()(x) \n    x = tf.keras.layers.ELU()(x) \n    x = tf.keras.layers.Conv2D(filters=(filters if not downsample else filters_l[i+1]), kernel_size=(3,3), kernel_initializer='he_uniform', strides=(2 if downsample else 1), padding='same' )(x)\n    x = tf.keras.layers.Add()([res_con,x])\n    \nx = tf.keras.layers.GlobalAveragePooling2D()(x) #nakonci poslední vsvy neudělám MaxPooling, ale GlobalAveraooling, což zlepší přesnost!!\nx = tf.keras.layers.Dense(10, activation='softmax')(x)\nmodel2 = tf.keras.Model(input_layer, x)\nmodel2.compile(optimizer=tf.keras.optimizers.Adam(0.001), #leraning rate pro 1 by se to ani netrénovalo, pro malé číslo zase strašně dlouho\n              loss=tf.keras.losses.CategoricalCrossentropy(label_smoothing=0.1), metrics=['acc'])   #labelsmooting místo too, aby všechny labely, které byly 0 mi předělalo na 0.1 a labely 1 předělalo na 0.9 a to způsobí, že se to nebude tolikrát přetrénovávat\n\nmodel2.summary()","metadata":{"execution":{"iopub.status.busy":"2023-01-25T20:26:21.582210Z","iopub.execute_input":"2023-01-25T20:26:21.582828Z","iopub.status.idle":"2023-01-25T20:26:24.926593Z","shell.execute_reply.started":"2023-01-25T20:26:21.582790Z","shell.execute_reply":"2023-01-25T20:26:24.925565Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model2.fit(x_train_reshaped, y_train_categorical, validation_data=(x_test_reshaped, y_test_categorical),batch_size=64, epochs=32)","metadata":{"execution":{"iopub.status.busy":"2023-01-25T20:26:29.950453Z","iopub.execute_input":"2023-01-25T20:26:29.951349Z","iopub.status.idle":"2023-01-25T20:40:58.819420Z","shell.execute_reply.started":"2023-01-25T20:26:29.951301Z","shell.execute_reply":"2023-01-25T20:40:58.818437Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Third CNN with EfficientNetB0(Transfer Learning)- model3","metadata":{}},{"cell_type":"markdown","source":"- with pre-trained CNN called EfficientNetB0  \n- with score in Kaggle leaderboard 0,6769 in competition","metadata":{}},{"cell_type":"code","source":"import numpy as np\nimport random as python_random\n\npython_random.seed(123) #TOLE JE KOD, KTERÝ KDYŽ SPUSTÍM VÍCEKRÁT, VŽDY MÁM STEJNÉ VSTUPNÍ PODMÍNKY\nnp.random.seed(123)\ntf.random.set_seed(1234)\nimport os\nos.environ['PYTHONHASHSEED'] = '0'\n\n\nmodel3 = tf.keras.applications.EfficientNetB0(\n    include_top=True,\n    weights=None,\n    input_tensor=None,\n    input_shape=(32,32,3),\n    pooling=None,\n    classes=10,\n    classifier_activation=\"softmax\")\n    \nmodel3.summary()\nmodel3.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['acc'])\n","metadata":{"execution":{"iopub.status.busy":"2023-01-25T20:41:14.452341Z","iopub.execute_input":"2023-01-25T20:41:14.452754Z","iopub.status.idle":"2023-01-25T20:41:15.783556Z","shell.execute_reply.started":"2023-01-25T20:41:14.452720Z","shell.execute_reply":"2023-01-25T20:41:15.782390Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Training the CNN model","metadata":{}},{"cell_type":"code","source":"model3.fit(x_train_reshaped, y_train_categorical, validation_data=(x_test_reshaped, y_test_categorical),batch_size=64, epochs=32)","metadata":{"execution":{"iopub.status.busy":"2023-01-25T20:41:25.272645Z","iopub.execute_input":"2023-01-25T20:41:25.273004Z","iopub.status.idle":"2023-01-25T21:01:55.705122Z","shell.execute_reply.started":"2023-01-25T20:41:25.272973Z","shell.execute_reply":"2023-01-25T21:01:55.703931Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Augmentation of the CNN","metadata":{}},{"cell_type":"code","source":"train_datagen = ImageDataGenerator(featurewise_center=False,\n                             samplewise_center=False,\n                             featurewise_std_normalization=False,\n                             samplewise_std_normalization=False,\n                             zca_whitening=False,\n                             rotation_range=10,\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                             rescale=1./255)\nvalid_datagen = ImageDataGenerator()\n\ntrain_generator = train_datagen.flow_from_directory(directory='/kaggle/temp/train/', shuffle=True, target_size=(32,32),batch_size=128)\nvalid_generator = valid_datagen.flow_from_directory(directory='/kaggle/temp/valid/', shuffle=True, target_size=(32,32),batch_size=128)","metadata":{"execution":{"iopub.status.busy":"2023-01-25T21:05:15.857012Z","iopub.execute_input":"2023-01-25T21:05:15.857524Z","iopub.status.idle":"2023-01-25T21:05:17.546661Z","shell.execute_reply.started":"2023-01-25T21:05:15.857485Z","shell.execute_reply":"2023-01-25T21:05:17.545606Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model1.save('my_model1')\nmodel2.save('my_model2')\nmodel3.save('my_model3')","metadata":{"execution":{"iopub.status.busy":"2023-01-25T21:05:36.322155Z","iopub.execute_input":"2023-01-25T21:05:36.322557Z","iopub.status.idle":"2023-01-25T21:06:31.974673Z","shell.execute_reply.started":"2023-01-25T21:05:36.322524Z","shell.execute_reply":"2023-01-25T21:06:31.973667Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Unzipping Test Data","metadata":{}},{"cell_type":"code","source":"shutil.unpack_archive('/kaggle/input/cifar-10/test.7z','/kaggle/temp/test')","metadata":{"execution":{"iopub.status.busy":"2023-01-25T21:06:50.754884Z","iopub.execute_input":"2023-01-25T21:06:50.755345Z","iopub.status.idle":"2023-01-25T21:25:13.047049Z","shell.execute_reply.started":"2023-01-25T21:06:50.755310Z","shell.execute_reply":"2023-01-25T21:25:13.046033Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"shutil.unpack_archive('../input/cifar-10/train.7z', '/kaggle/temp/')","metadata":{"execution":{"iopub.status.busy":"2023-01-25T21:26:08.349021Z","iopub.execute_input":"2023-01-25T21:26:08.349443Z","iopub.status.idle":"2023-01-25T21:26:58.846336Z","shell.execute_reply.started":"2023-01-25T21:26:08.349400Z","shell.execute_reply":"2023-01-25T21:26:58.845204Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_datagen = ImageDataGenerator(rescale=1./1.)\n\ntest_gen = test_datagen.flow_from_directory(directory='/kaggle/temp/test',target_size=(32,32),batch_size=64,class_mode=None,shuffle=False)","metadata":{"execution":{"iopub.status.busy":"2023-01-25T21:26:58.851525Z","iopub.execute_input":"2023-01-25T21:26:58.851841Z","iopub.status.idle":"2023-01-25T21:27:04.860972Z","shell.execute_reply.started":"2023-01-25T21:26:58.851812Z","shell.execute_reply":"2023-01-25T21:27:04.859867Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_gen.reset()\npredictions_vecs1 = model1.predict(test_gen)\npredictions_vecs2 = model2.predict(test_gen)\n#predictions_vecs3 = model3.predict(test_gen)\n\npredictions_final = np.argmax(predictions_vecs2, axis=1)","metadata":{"execution":{"iopub.status.busy":"2023-01-25T21:27:04.862520Z","iopub.execute_input":"2023-01-25T21:27:04.863507Z","iopub.status.idle":"2023-01-25T21:31:13.588738Z","shell.execute_reply.started":"2023-01-25T21:27:04.863461Z","shell.execute_reply":"2023-01-25T21:31:13.587638Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Create labels for classes for submission","metadata":{}},{"cell_type":"code","source":"print(type(train_generator.class_indices))\nprint(train_generator.class_indices)\n\nclasses = {value:key for (key,value) in train_generator.class_indices.items()}\nprint(classes)\n\npredicted_classes=np.empty(shape=300000,dtype=np.dtype('U20'))\n\nind=0\nfor i in predictions_final.tolist():\n    predicted_classes[ind]=classes[i]\n    ind=ind+1\n    \nfilenames_wo_ext = []\nfor fname in test_gen.filenames:\n    filenames_wo_ext.append(int(fname.split(sep=\"/\")[1].split(sep=\".\")[0])-1)\n\npredicted_classes_final = np.empty(shape=300000,dtype=np.dtype('U20'))\npredicted_classes_final[filenames_wo_ext]=predicted_classes","metadata":{"execution":{"iopub.status.busy":"2023-01-25T21:31:13.591661Z","iopub.execute_input":"2023-01-25T21:31:13.592070Z","iopub.status.idle":"2023-01-25T21:31:13.979039Z","shell.execute_reply.started":"2023-01-25T21:31:13.592030Z","shell.execute_reply":"2023-01-25T21:31:13.978015Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Prediction","metadata":{}},{"cell_type":"code","source":"model1.predict(x_train_reshaped[:2])\nmodel2.predict(x_train_reshaped[:2])\nmodel3.predict(x_train_reshaped[:2])","metadata":{"execution":{"iopub.status.busy":"2023-01-25T21:31:13.980700Z","iopub.execute_input":"2023-01-25T21:31:13.981112Z","iopub.status.idle":"2023-01-25T21:31:16.526555Z","shell.execute_reply.started":"2023-01-25T21:31:13.981073Z","shell.execute_reply":"2023-01-25T21:31:16.525335Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Submission","metadata":{}},{"cell_type":"code","source":"sub = pd.read_csv('../input/cifar-10/sampleSubmission.csv',header='infer')\nsub.info()","metadata":{"execution":{"iopub.status.busy":"2023-01-25T21:31:16.527992Z","iopub.execute_input":"2023-01-25T21:31:16.529085Z","iopub.status.idle":"2023-01-25T21:31:16.658684Z","shell.execute_reply.started":"2023-01-25T21:31:16.529042Z","shell.execute_reply":"2023-01-25T21:31:16.657397Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub['label'] = predicted_classes_final\nsub.to_csv('submission.csv',index=False)","metadata":{"execution":{"iopub.status.busy":"2023-01-25T21:31:16.663673Z","iopub.execute_input":"2023-01-25T21:31:16.664451Z","iopub.status.idle":"2023-01-25T21:31:17.258069Z","shell.execute_reply.started":"2023-01-25T21:31:16.664402Z","shell.execute_reply":"2023-01-25T21:31:17.256625Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub","metadata":{"execution":{"iopub.status.busy":"2023-01-25T21:31:17.259587Z","iopub.execute_input":"2023-01-25T21:31:17.260572Z","iopub.status.idle":"2023-01-25T21:31:17.275608Z","shell.execute_reply.started":"2023-01-25T21:31:17.260526Z","shell.execute_reply":"2023-01-25T21:31:17.273688Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}