{"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":{"id":"5d507de7","papermill":{"duration":0.04192,"end_time":"2022-05-06T04:22:00.582545","exception":false,"start_time":"2022-05-06T04:22:00.540625","status":"completed"},"tags":[],"outputId":"ce29f045-ae51-4aab-968f-a1395219295a","execution":{"iopub.status.busy":"2022-05-06T08:30:09.651757Z","iopub.execute_input":"2022-05-06T08:30:09.652088Z","iopub.status.idle":"2022-05-06T08:30:09.683382Z","shell.execute_reply.started":"2022-05-06T08:30:09.652001Z","shell.execute_reply":"2022-05-06T08:30:09.682538Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!pip install py7zr","metadata":{"papermill":{"duration":27.603747,"end_time":"2022-05-06T04:22:28.213402","exception":false,"start_time":"2022-05-06T04:22:00.609655","status":"completed"},"tags":[],"id":"26b6e2be","outputId":"f7e6b9eb-b693-424e-d7ea-0e2b20308319","execution":{"iopub.status.busy":"2022-05-06T08:30:09.68508Z","iopub.execute_input":"2022-05-06T08:30:09.685575Z","iopub.status.idle":"2022-05-06T08:30:40.825196Z","shell.execute_reply.started":"2022-05-06T08:30:09.685535Z","shell.execute_reply":"2022-05-06T08:30:40.824368Z"},"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":{"papermill":{"duration":0.291451,"end_time":"2022-05-06T04:22:28.549409","exception":false,"start_time":"2022-05-06T04:22:28.257958","status":"completed"},"tags":[],"id":"2c056f0d","execution":{"iopub.status.busy":"2022-05-06T08:30:40.826885Z","iopub.execute_input":"2022-05-06T08:30:40.827172Z","iopub.status.idle":"2022-05-06T08:30:41.175623Z","shell.execute_reply.started":"2022-05-06T08:30:40.827134Z","shell.execute_reply":"2022-05-06T08:30:41.174906Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#unpack train images to temp directory\nshutil.unpack_archive('/kaggle/input/cifar-10/train.7z','/kaggle/temp/')","metadata":{"papermill":{"duration":47.905146,"end_time":"2022-05-06T04:23:16.498986","exception":false,"start_time":"2022-05-06T04:22:28.59384","status":"completed"},"tags":[],"id":"7d123fbe","execution":{"iopub.status.busy":"2022-05-06T08:30:41.177445Z","iopub.execute_input":"2022-05-06T08:30:41.177837Z","iopub.status.idle":"2022-05-06T08:31:30.270694Z","shell.execute_reply.started":"2022-05-06T08:30:41.177803Z","shell.execute_reply":"2022-05-06T08:31:30.269724Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_labels = pd.read_csv('/kaggle/input/cifar-10/trainLabels.csv', header= 'infer')\n\n#unique labels\nclasses = train_labels['label'].unique()\n\nprint(classes)\n\nimport os\n\nif not os.path.exists(\"/kaggle/temp/validation/\"):\n    os.mkdir(\"/kaggle/temp/validation/\")\n\nparent_path_train = \"/kaggle/temp/train/\"\nparent_path_validation = \"/kaggle/temp/validation/\"\nparent_path_test = \"/kaggle/temp/test/\"\n\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        \n    path_validation = os.path.join(parent_path_validation,class1)\n    if not os.path.exists(path_validation):\n        os.mkdir(path_validation)\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.80:\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_validation,row[\"label\"],id)\n        os.replace(source_path,target_path)\n","metadata":{"papermill":{"duration":4.750231,"end_time":"2022-05-06T04:23:21.296117","exception":false,"start_time":"2022-05-06T04:23:16.545886","status":"completed"},"tags":[],"id":"4c069fb0","outputId":"91360b9c-7412-4ef6-d97d-2ad367caca03","execution":{"iopub.status.busy":"2022-05-06T08:31:30.276307Z","iopub.execute_input":"2022-05-06T08:31:30.278719Z","iopub.status.idle":"2022-05-06T08:31:36.064241Z","shell.execute_reply.started":"2022-05-06T08:31:30.278659Z","shell.execute_reply":"2022-05-06T08:31:36.063353Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\nimport tensorflow\nfrom tensorflow import keras\nfrom keras.datasets import cifar10\nfrom keras.utils import np_utils\nfrom keras.applications.xception import Xception,preprocess_input\nfrom keras.layers import Dense,MaxPool2D,Conv2D,Dropout,Flatten,GlobalAveragePooling2D\nfrom keras.models import Sequential\nimport numpy as np\nimport cv2 \nfrom keras.utils.np_utils import to_categorical\nfrom keras.callbacks import ReduceLROnPlateau\n\nfrom keras.preprocessing.image import ImageDataGenerator","metadata":{"papermill":{"duration":6.662038,"end_time":"2022-05-06T04:23:28.015602","exception":false,"start_time":"2022-05-06T04:23:21.353564","status":"completed"},"tags":[],"id":"bd5a74c8","execution":{"iopub.status.busy":"2022-05-06T08:31:36.065519Z","iopub.execute_input":"2022-05-06T08:31:36.065776Z","iopub.status.idle":"2022-05-06T08:31:40.935651Z","shell.execute_reply.started":"2022-05-06T08:31:36.065741Z","shell.execute_reply":"2022-05-06T08:31:40.93491Z"},"trusted":true},"execution_count":null,"outputs":[]},{"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\n                                  )\n\ntrain_gen = train_datagen.flow_from_directory(directory='/kaggle/temp/train/',target_size=(32,32),batch_size=128)\nvalidation_datagen = ImageDataGenerator(rescale=1./255)\nvalid_gen = validation_datagen.flow_from_directory(directory='/kaggle/temp/validation/',target_size=(32,32),batch_size=128)","metadata":{"papermill":{"duration":1.726491,"end_time":"2022-05-06T04:23:29.835586","exception":false,"start_time":"2022-05-06T04:23:28.109095","status":"completed"},"tags":[],"id":"9887ad51","outputId":"f2c3c484-2d1c-4a9f-8597-de7fe41a6064","execution":{"iopub.status.busy":"2022-05-06T08:31:40.937002Z","iopub.execute_input":"2022-05-06T08:31:40.937267Z","iopub.status.idle":"2022-05-06T08:31:42.469652Z","shell.execute_reply.started":"2022-05-06T08:31:40.937225Z","shell.execute_reply":"2022-05-06T08:31:42.468406Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import tensorflow\n\ninitializer = keras.initializers.he_normal()\ninput_tensor = keras.Input(shape=(32, 32, 3))\n\nresized_images = keras.layers.Lambda(lambda image: tensorflow.image.resize(image, (72, 72)))(input_tensor)\nmodel = Xception(include_top=False,weights='imagenet',input_tensor=resized_images,input_shape=(72, 72, 3),pooling='max')\n\nfor layer in model.layers:\n    layer.trainable = False\noutput = model.layers[-1].output\n\nflatten = Flatten()\noutput = flatten(output)\nlayer_256 = Dense(units=256,activation='relu',kernel_initializer=initializer,kernel_regularizer=keras.regularizers.l2())\noutput = layer_256(output)\n\ndropout = Dropout(0.3)\noutput = dropout(output)\n\nsoftmax = Dense(units=10,activation='softmax',kernel_initializer=initializer,kernel_regularizer=keras.regularizers.l2())\noutput = softmax(output)\n\nmodel = keras.models.Model(inputs=input_tensor, outputs=output)","metadata":{"id":"925b2f70","papermill":{"duration":4.323048,"end_time":"2022-05-06T04:23:34.905609","exception":false,"start_time":"2022-05-06T04:23:30.582561","status":"completed"},"tags":[],"outputId":"04c71efd-d60e-4439-c76b-550774ffa98f","execution":{"iopub.status.busy":"2022-05-06T08:31:42.470981Z","iopub.execute_input":"2022-05-06T08:31:42.471213Z","iopub.status.idle":"2022-05-06T08:31:47.733696Z","shell.execute_reply.started":"2022-05-06T08:31:42.47118Z","shell.execute_reply":"2022-05-06T08:31:47.73299Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.summary()","metadata":{"papermill":{"duration":0.115589,"end_time":"2022-05-06T04:23:35.071304","exception":false,"start_time":"2022-05-06T04:23:34.955715","status":"completed"},"tags":[],"id":"13074fdc","outputId":"cb91ac07-80aa-4567-bac4-35f5d7b6c7e0","execution":{"iopub.status.busy":"2022-05-06T08:31:47.734893Z","iopub.execute_input":"2022-05-06T08:31:47.736908Z","iopub.status.idle":"2022-05-06T08:31:47.8103Z","shell.execute_reply.started":"2022-05-06T08:31:47.736875Z","shell.execute_reply":"2022-05-06T08:31:47.809603Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.compile(optimizer='rmsprop',loss='categorical_crossentropy',metrics=['accuracy'])\n","metadata":{"id":"0db5d0b4","papermill":{"duration":0.066651,"end_time":"2022-05-06T04:23:35.189532","exception":false,"start_time":"2022-05-06T04:23:35.122881","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-05-06T08:31:47.813427Z","iopub.execute_input":"2022-05-06T08:31:47.813629Z","iopub.status.idle":"2022-05-06T08:31:47.83139Z","shell.execute_reply.started":"2022-05-06T08:31:47.813605Z","shell.execute_reply":"2022-05-06T08:31:47.830627Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.fit(train_gen,epochs=50,validation_data=valid_gen,steps_per_epoch=train_gen.n//train_gen.batch_size,\n         validation_steps= valid_gen.n//valid_gen.batch_size)","metadata":{"papermill":{"duration":2975.83914,"end_time":"2022-05-06T05:13:11.07927","exception":false,"start_time":"2022-05-06T04:23:35.24013","status":"completed"},"tags":[],"id":"d24f3d07","outputId":"26b916bf-5506-447a-f02b-5593c19ce607","execution":{"iopub.status.busy":"2022-05-06T08:31:47.832758Z","iopub.execute_input":"2022-05-06T08:31:47.833018Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# train_datagen = keras.preprocessing.image.ImageDataGenerator(horizontal_flip=True)\n# train_generator = train_datagen.flow(x_train,y_train,batch_size=32)\n\n# val_datagen = keras.preprocessing.image.ImageDataGenerator(horizontal_flip=True)\n# val_generator = val_datagen.flow(x_test,y_test,batch_size=32)\n\n# train_steps_per_epoch = x_train.shape[0] // 32\n# val_steps_per_epoch = x_test.shape[0] // 32\n\n# model.fit(train_generator,steps_per_epoch=train_steps_per_epoch,validation_data=val_generator,validation_steps=val_steps_per_epoch,epochs=20,shuffle=True,verbose=1)","metadata":{"id":"e1d5a182","papermill":{"duration":4.857764,"end_time":"2022-05-06T05:13:21.0104","exception":false,"start_time":"2022-05-06T05:13:16.152636","status":"completed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"shutil.register_unpack_format('7zip',['.7z'],unpack_7zarchive)\nshutil.unpack_archive('/kaggle/input/cifar-10/test.7z','/kaggle/temp/test')","metadata":{"id":"f350be30","outputId":"96a34135-07c8-4a7f-d14a-a29dce64bcad","papermill":{"duration":5.149707,"end_time":"2022-05-06T05:13:31.870345","exception":true,"start_time":"2022-05-06T05:13:26.720638","status":"failed"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"shutil.unregister_unpack_format('7zip')","metadata":{"id":"a09cad3a","papermill":{"duration":null,"end_time":null,"exception":null,"start_time":null,"status":"pending"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_datagen = ImageDataGenerator(rescale=1./255)\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":{"id":"e8728525","papermill":{"duration":null,"end_time":null,"exception":null,"start_time":null,"status":"pending"},"tags":[],"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import os\n\nos.chdir('/kaggle/temp/test/test')\nprint(os.getcwd())","metadata":{"papermill":{"duration":null,"end_time":null,"exception":null,"start_time":null,"status":"pending"},"tags":[],"id":"8ce62589","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_gen.filenames","metadata":{"papermill":{"duration":null,"end_time":null,"exception":null,"start_time":null,"status":"pending"},"tags":[],"id":"adef9d3f","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"predictions_final = model.predict(test_gen)","metadata":{"papermill":{"duration":null,"end_time":null,"exception":null,"start_time":null,"status":"pending"},"tags":[],"id":"312497ac","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"predictions_final[1]","metadata":{"papermill":{"duration":null,"end_time":null,"exception":null,"start_time":null,"status":"pending"},"tags":[],"id":"f1f8fc47","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(type(train_gen.class_indices))\nprint(train_gen.class_indices)\n\nclasses = {value:key for (key,value) in train_gen.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[np.argmax(i)]\n    ind=ind+1","metadata":{"papermill":{"duration":null,"end_time":null,"exception":null,"start_time":null,"status":"pending"},"tags":[],"id":"e611dc01","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"predicted_classes[9]","metadata":{"papermill":{"duration":null,"end_time":null,"exception":null,"start_time":null,"status":"pending"},"tags":[],"id":"939da423","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"filenames_wo_ext = []\nfor fname in test_gen.filenames:\n    filenames_wo_ext.append(int(fname.split(sep=\"/\")[-1].split(sep=\".\")[0])-1)\n\n# print(filenames_wo_ext)\n# print(len(predicted_classes))\n\npredicted_classes_final = np.empty(shape=300000,dtype=np.dtype('U20'))\n# for i in range(0,300000) :\n#     predicted_classes_final[i]= predicted_classes[i]\npredicted_classes_final[filenames_wo_ext]=predicted_classes","metadata":{"papermill":{"duration":null,"end_time":null,"exception":null,"start_time":null,"status":"pending"},"tags":[],"id":"531b9d59","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"predicted_classes_final","metadata":{"papermill":{"duration":null,"end_time":null,"exception":null,"start_time":null,"status":"pending"},"tags":[],"id":"4ff8ca4e","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub = pd.read_csv('/kaggle/input/cifar-10/sampleSubmission.csv',header='infer')\nsub.info()","metadata":{"papermill":{"duration":null,"end_time":null,"exception":null,"start_time":null,"status":"pending"},"tags":[],"id":"ee2796ee","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub['label'] = predicted_classes_final\nsub.to_csv('submission.csv',index=False)","metadata":{"papermill":{"duration":null,"end_time":null,"exception":null,"start_time":null,"status":"pending"},"tags":[],"id":"bc57833c","trusted":true},"execution_count":null,"outputs":[]}]}