{"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-08-19T00:08:14.156170Z","iopub.execute_input":"2023-08-19T00:08:14.156878Z","iopub.status.idle":"2023-08-19T00:08:14.190432Z","shell.execute_reply.started":"2023-08-19T00:08:14.156768Z","shell.execute_reply":"2023-08-19T00:08:14.189359Z"},"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-08-19T00:08:35.902920Z","iopub.execute_input":"2023-08-19T00:08:35.906986Z","iopub.status.idle":"2023-08-19T00:08:41.494638Z","shell.execute_reply.started":"2023-08-19T00:08:35.906932Z","shell.execute_reply":"2023-08-19T00:08:41.493522Z"},"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-08-19T00:09:59.814990Z","iopub.execute_input":"2023-08-19T00:09:59.815865Z","iopub.status.idle":"2023-08-19T00:09:59.824165Z","shell.execute_reply.started":"2023-08-19T00:09:59.815805Z","shell.execute_reply":"2023-08-19T00:09:59.823080Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!pip install py7zr","metadata":{"execution":{"iopub.status.busy":"2023-08-19T00:10:00.847889Z","iopub.execute_input":"2023-08-19T00:10:00.848574Z","iopub.status.idle":"2023-08-19T00:10:14.056405Z","shell.execute_reply.started":"2023-08-19T00:10:00.848528Z","shell.execute_reply":"2023-08-19T00:10:14.054905Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from py7zr import unpack_7zarchive\nimport shutil\n\nshutil.register_unpack_format('7zip',['.7z'],unpack_7zarchive)","metadata":{"execution":{"iopub.status.busy":"2023-08-19T00:11:13.886631Z","iopub.execute_input":"2023-08-19T00:11:13.887119Z","iopub.status.idle":"2023-08-19T00:11:13.901188Z","shell.execute_reply.started":"2023-08-19T00:11:13.887075Z","shell.execute_reply":"2023-08-19T00:11:13.900075Z"},"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-08-19T00:11:15.815344Z","iopub.execute_input":"2023-08-19T00:11:15.815737Z","iopub.status.idle":"2023-08-19T00:12:20.747956Z","shell.execute_reply.started":"2023-08-19T00:11:15.815703Z","shell.execute_reply":"2023-08-19T00:12:20.746754Z"},"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-08-19T00:12:39.763460Z","iopub.execute_input":"2023-08-19T00:12:39.763870Z","iopub.status.idle":"2023-08-19T00:12:39.813711Z","shell.execute_reply.started":"2023-08-19T00:12:39.763834Z","shell.execute_reply":"2023-08-19T00:12:39.812512Z"},"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-08-19T00:12:40.142829Z","iopub.execute_input":"2023-08-19T00:12:40.143399Z","iopub.status.idle":"2023-08-19T00:12:46.255552Z","shell.execute_reply.started":"2023-08-19T00:12:40.143362Z","shell.execute_reply":"2023-08-19T00:12:46.254431Z"},"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-08-19T00:12:48.303745Z","iopub.execute_input":"2023-08-19T00:12:48.304330Z","iopub.status.idle":"2023-08-19T00:12:50.894461Z","shell.execute_reply.started":"2023-08-19T00:12:48.304255Z","shell.execute_reply":"2023-08-19T00:12:50.893069Z"},"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-08-19T00:12:53.913417Z","iopub.execute_input":"2023-08-19T00:12:53.914162Z","iopub.status.idle":"2023-08-19T00:12:59.087531Z","shell.execute_reply.started":"2023-08-19T00:12:53.914112Z","shell.execute_reply":"2023-08-19T00:12:59.086320Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"x_train.shape","metadata":{"execution":{"iopub.status.busy":"2023-08-19T00:12:59.089739Z","iopub.execute_input":"2023-08-19T00:12:59.090241Z","iopub.status.idle":"2023-08-19T00:12:59.098791Z","shell.execute_reply.started":"2023-08-19T00:12:59.090203Z","shell.execute_reply":"2023-08-19T00:12:59.097488Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_train.shape","metadata":{"execution":{"iopub.status.busy":"2023-08-19T00:12:59.100695Z","iopub.execute_input":"2023-08-19T00:12:59.101178Z","iopub.status.idle":"2023-08-19T00:12:59.118280Z","shell.execute_reply.started":"2023-08-19T00:12:59.101137Z","shell.execute_reply":"2023-08-19T00:12:59.117114Z"},"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-08-19T00:12:59.695007Z","iopub.execute_input":"2023-08-19T00:12:59.695800Z","iopub.status.idle":"2023-08-19T00:13:00.009026Z","shell.execute_reply.started":"2023-08-19T00:12:59.695759Z","shell.execute_reply":"2023-08-19T00:13:00.008061Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_train_categorical.sum(0)","metadata":{"execution":{"iopub.status.busy":"2023-08-19T00:13:01.914438Z","iopub.execute_input":"2023-08-19T00:13:01.914809Z","iopub.status.idle":"2023-08-19T00:13:01.928384Z","shell.execute_reply.started":"2023-08-19T00:13:01.914774Z","shell.execute_reply":"2023-08-19T00:13:01.926945Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"x_train[0][:3,:3] #shape 28,28","metadata":{"execution":{"iopub.status.busy":"2023-08-19T00:13:02.261824Z","iopub.execute_input":"2023-08-19T00:13:02.264393Z","iopub.status.idle":"2023-08-19T00:13:02.279050Z","shell.execute_reply.started":"2023-08-19T00:13:02.264333Z","shell.execute_reply":"2023-08-19T00:13:02.277830Z"},"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-08-19T00:13:02.656213Z","iopub.execute_input":"2023-08-19T00:13:02.656630Z","iopub.status.idle":"2023-08-19T00:13:02.665543Z","shell.execute_reply.started":"2023-08-19T00:13:02.656595Z","shell.execute_reply":"2023-08-19T00:13:02.664324Z"},"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-08-19T00:13:03.688518Z","iopub.execute_input":"2023-08-19T00:13:03.689221Z","iopub.status.idle":"2023-08-19T00:13:03.733017Z","shell.execute_reply.started":"2023-08-19T00:13:03.689180Z","shell.execute_reply":"2023-08-19T00:13:03.731055Z"},"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-08-19T00:13:05.009691Z","iopub.execute_input":"2023-08-19T00:13:05.010253Z","iopub.status.idle":"2023-08-19T00:13:08.342880Z","shell.execute_reply.started":"2023-08-19T00:13:05.010210Z","shell.execute_reply":"2023-08-19T00:13:08.340937Z"},"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-08-19T00:13:08.346294Z","iopub.execute_input":"2023-08-19T00:13:08.350071Z","iopub.status.idle":"2023-08-19T00:15:30.389264Z","shell.execute_reply.started":"2023-08-19T00:13:08.349998Z","shell.execute_reply":"2023-08-19T00:15:30.388113Z"},"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-08-19T00:17:01.999593Z","iopub.execute_input":"2023-08-19T00:17:01.999967Z","iopub.status.idle":"2023-08-19T00:17:03.543915Z","shell.execute_reply.started":"2023-08-19T00:17:01.999933Z","shell.execute_reply":"2023-08-19T00:17:03.542876Z"},"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-08-19T00:17:08.871651Z","iopub.execute_input":"2023-08-19T00:17:08.872067Z","iopub.status.idle":"2023-08-19T00:31:35.133517Z","shell.execute_reply.started":"2023-08-19T00:17:08.872010Z","shell.execute_reply":"2023-08-19T00:31:35.132316Z"},"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='nadam', loss='categorical_crossentropy', metrics=['acc'])\n","metadata":{"execution":{"iopub.status.busy":"2023-08-19T00:32:11.558816Z","iopub.execute_input":"2023-08-19T00:32:11.559242Z","iopub.status.idle":"2023-08-19T00:32:12.911122Z","shell.execute_reply.started":"2023-08-19T00:32:11.559206Z","shell.execute_reply":"2023-08-19T00:32:12.909956Z"},"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=128, epochs=32)","metadata":{"execution":{"iopub.status.busy":"2023-08-19T00:32:26.802285Z","iopub.execute_input":"2023-08-19T00:32:26.802664Z","iopub.status.idle":"2023-08-19T00:49:07.956153Z","shell.execute_reply.started":"2023-08-19T00:32:26.802631Z","shell.execute_reply":"2023-08-19T00:49:07.955000Z"},"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-08-19T00:54:58.215170Z","iopub.execute_input":"2023-08-19T00:54:58.215586Z","iopub.status.idle":"2023-08-19T00:54:59.839478Z","shell.execute_reply.started":"2023-08-19T00:54:58.215552Z","shell.execute_reply":"2023-08-19T00:54:59.838286Z"},"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-08-19T00:55:03.945446Z","iopub.execute_input":"2023-08-19T00:55:03.945886Z","iopub.status.idle":"2023-08-19T00:56:05.905308Z","shell.execute_reply.started":"2023-08-19T00:55:03.945849Z","shell.execute_reply":"2023-08-19T00:56:05.904230Z"},"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-08-19T00:56:25.138420Z","iopub.execute_input":"2023-08-19T00:56:25.138874Z","iopub.status.idle":"2023-08-19T01:18:44.293262Z","shell.execute_reply.started":"2023-08-19T00:56:25.138836Z","shell.execute_reply":"2023-08-19T01:18:44.292147Z"},"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-08-19T01:22:35.153050Z","iopub.execute_input":"2023-08-19T01:22:35.153473Z","iopub.status.idle":"2023-08-19T01:23:41.403605Z","shell.execute_reply.started":"2023-08-19T01:22:35.153437Z","shell.execute_reply":"2023-08-19T01:23:41.402540Z"},"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-08-19T01:23:44.453012Z","iopub.execute_input":"2023-08-19T01:23:44.453425Z","iopub.status.idle":"2023-08-19T01:23:53.624022Z","shell.execute_reply.started":"2023-08-19T01:23:44.453391Z","shell.execute_reply":"2023-08-19T01:23:53.622802Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_gen.reset()\n# predictions_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-08-19T01:23:56.093909Z","iopub.execute_input":"2023-08-19T01:23:56.094679Z","iopub.status.idle":"2023-08-19T01:26:08.608269Z","shell.execute_reply.started":"2023-08-19T01:23:56.094637Z","shell.execute_reply":"2023-08-19T01:26:08.607199Z"},"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-08-19T01:26:18.797419Z","iopub.execute_input":"2023-08-19T01:26:18.797825Z","iopub.status.idle":"2023-08-19T01:26:19.464736Z","shell.execute_reply.started":"2023-08-19T01:26:18.797791Z","shell.execute_reply":"2023-08-19T01:26:19.463629Z"},"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-08-19T01:26:21.883270Z","iopub.execute_input":"2023-08-19T01:26:21.883673Z","iopub.status.idle":"2023-08-19T01:26:24.256255Z","shell.execute_reply.started":"2023-08-19T01:26:21.883614Z","shell.execute_reply":"2023-08-19T01:26:24.255087Z"},"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-08-19T01:26:26.801002Z","iopub.execute_input":"2023-08-19T01:26:26.801439Z","iopub.status.idle":"2023-08-19T01:26:26.973557Z","shell.execute_reply.started":"2023-08-19T01:26:26.801402Z","shell.execute_reply":"2023-08-19T01:26:26.972376Z"},"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-08-19T01:26:31.099549Z","iopub.execute_input":"2023-08-19T01:26:31.099951Z","iopub.status.idle":"2023-08-19T01:26:31.700569Z","shell.execute_reply.started":"2023-08-19T01:26:31.099917Z","shell.execute_reply":"2023-08-19T01:26:31.699441Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub","metadata":{"execution":{"iopub.status.busy":"2023-08-19T01:26:35.333271Z","iopub.execute_input":"2023-08-19T01:26:35.333673Z","iopub.status.idle":"2023-08-19T01:26:35.353094Z","shell.execute_reply.started":"2023-08-19T01:26:35.333638Z","shell.execute_reply":"2023-08-19T01:26:35.351896Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}