{"cells":[{"metadata":{},"cell_type":"markdown","source":"# Important:\n#### 1. Please add the [Previous Notebook's output Dataset](https://www.kaggle.com/timothyalexjohn/birdcall-spectrograms-cornell-birdcall-challenge) to this Notebook.\n\n#### 2. Trained Model (Output) of this Notebook can be found [here](https://www.kaggle.com/timothyalexjohn/xception-birdcall-model). ","execution_count":null},{"metadata":{},"cell_type":"markdown","source":"# Notebook_1 || Part 2\n\nThis Notebook is the **2nd Part** of 'Birdsong_Classifier_Keras_CNN' Notebook for \"Cornell Birdcall Identification\" challenge.\n\nIn the [Previous Part](https://www.kaggle.com/timothyalexjohn/birdsong-classifier-keras-cnn-part-1-notebook-1) of Notebook_1 we converted Audio Files to Spectrogram Image Files using Librosa. \n\nIn this Part we upload last Notebook's Output and train CNN on the extracted features. \n\nIn the [Next part](https://www.kaggle.com/timothyalexjohn/birdsong-classifier-keras-cnn-part-3-notebook-1), trained-model of this notebook and uploaded to next Notebook for prediction.","execution_count":null},{"metadata":{},"cell_type":"markdown","source":"## Notebooks in this Challenge:\n\n* Notebook_1:\n       \n > [Part 1](https://www.kaggle.com/timothyalexjohn/birdsong-classifier-keras-cnn-part-1-notebook-1):  Converting Audio Files to Spectrogram Image Files using Librosa\n  \n > [Part 2](https://www.kaggle.com/timothyalexjohn/birdsong-classifier-keras-cnn-part-2-notebook-1):  Running CNN on Extracted Features / Training\n \n > [Part 3](https://www.kaggle.com/timothyalexjohn/birdsong-classifier-keras-cnn-part-3-notebook-1): Prediction of test data\n \n\n* Notebook_2:\n        \n >Running LSTM Cells directly on Audio Files\n \n \n...Links will be updated soon!","execution_count":null},{"metadata":{},"cell_type":"markdown","source":"## Importing Library","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"import librosa            # Python Audio Manipulation Library\nimport librosa.display\nimport numpy as np\nimport pandas as pd\nimport os\nimport cv2\n\nimport tensorflow.keras as tk\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\nfrom tensorflow.keras.applications import Xception\nfrom tensorflow.keras.layers import GlobalMaxPooling2D, Dense, Flatten,MaxPooling2D, GlobalAveragePooling2D, Dropout, Input, Concatenate, BatchNormalization, Conv2D\nfrom tensorflow.keras import Model\nimport matplotlib.pyplot as plt","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Reference Directory","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"train_dir = '../input/birdcall-spectrograms-cornell-birdcall-challenge/train'\ntrain_csv_dir = '../input/birdsong-recognition/train.csv'\n\ntest_dir = '../input/birdsong-recognition/test_audio/'\ntest_csv_dir = '../input/birdsong-recognition/test.csv'\n####################################################################################################/test/exa_test_......\nexa_test_dir = '../input/birdcall-spectrograms-cornell-birdcall-challenge/example_test_image/'\nexa_test_csv_dir = '../input/birdsong-recognition/example_test_audio_summary.csv'\n\ntrain_df = pd.read_csv(train_csv_dir)\nval_df = pd.read_csv(exa_test_csv_dir)\ntest_df = pd.read_csv(test_csv_dir)\n\n########## [This is Not used for validation, bcz of ebird_code error] ##########\nval_list = []\nval_list_y = []\nval_list_df = pd.DataFrame([])\n\nfor img in os.listdir(exa_test_dir):\n    val_list.append(exa_test_dir +img)\n    img_name = img.split('.')[0]\n    val_list_y.append(' '.join(val_df[val_df['filename_seconds']==img_name]['birds'].astype(str).values))\n\nval_list_df['image'] = val_list\nval_list_df['label'] = val_list_y","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Data Generator","execution_count":null},{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"train_datagen = ImageDataGenerator(rescale = 1./255,\n                                   validation_split=0.2)\n\ntrain_generator = train_datagen.flow_from_directory(train_dir,\n                                                    target_size = (150, 150), \n                                                    class_mode = 'categorical',\n                                                    batch_size = 160,\n                                                    shuffle = True,\n                                                    subset= 'training')\n\nval_generator = train_datagen.flow_from_directory(train_dir,\n                                                    target_size = (150, 150), \n                                                    class_mode = 'categorical',\n                                                    batch_size = 160,\n                                                    shuffle = True,\n                                                    subset= 'validation')\n\nprint(train_generator.class_indices)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Found 17134 images belonging to 264 classes.\n\nFound 4209 images belonging to 264 classes.\n\n{'aldfly': 0, 'ameavo': 1, 'amebit': 2, 'amecro': 3, 'amegfi': 4, 'amekes': 5, 'amepip': 6, 'amered': 7, 'amerob': 8, 'amewig': 9, 'amewoo': 10, 'amtspa': 11, 'annhum': 12, 'astfly': 13, 'baisan': 14, 'baleag': 15, 'balori': 16, 'banswa': 17, 'barswa': 18, 'bawwar': 19, 'belkin1': 20, 'belspa2': 21, 'bewwre': 22, 'bkbcuc': 23, 'bkbmag1': 24, 'bkbwar': 25, 'bkcchi': 26, 'bkchum': 27, 'bkhgro': 28, 'bkpwar': 29, 'bktspa': 30, 'blkpho': 31, 'blugrb1': 32, 'blujay': 33, 'bnhcow': 34, 'boboli': 35, 'bongul': 36, 'brdowl': 37, 'brebla': 38, 'brespa': 39, 'brncre': 40, 'brnthr': 41, 'brthum': 42, 'brwhaw': 43, 'btbwar': 44, 'btnwar': 45, 'btywar': 46, 'buffle': 47, 'buggna': 48, 'buhvir': 49, 'bulori': 50, 'bushti': 51, 'buwtea': 52, 'buwwar': 53, 'cacwre': 54, 'calgul': 55, 'calqua': 56, 'camwar': 57, 'cangoo': 58, 'canwar': 59, 'canwre': 60, 'carwre': 61, 'casfin': 62, 'caster1': 63, 'casvir': 64, 'cedwax': 65, 'chispa': 66, 'chiswi': 67, 'chswar': 68, 'chukar': 69, 'clanut': 70, 'cliswa': 71, 'comgol': 72, 'comgra': 73, 'comloo': 74, 'commer': 75, 'comnig': 76, 'comrav': 77, 'comred': 78, 'comter': 79, 'comyel': 80, 'coohaw': 81, 'coshum': 82, 'cowscj1': 83, 'daejun': 84, 'doccor': 85, 'dowwoo': 86, 'dusfly': 87, 'eargre': 88, 'easblu': 89, 'easkin': 90, 'easmea': 91, 'easpho': 92, 'eastow': 93, 'eawpew': 94, 'eucdov': 95, 'eursta': 96, 'evegro': 97, 'fiespa': 98, 'fiscro': 99, 'foxspa': 100, 'gadwal': 101, 'gcrfin': 102, 'gnttow': 103, 'gnwtea': 104, 'gockin': 105, 'gocspa': 106, 'goleag': 107, 'grbher3': 108, 'grcfly': 109, 'greegr': 110, 'greroa': 111, 'greyel': 112, 'grhowl': 113, 'grnher': 114, 'grtgra': 115, 'grycat': 116, 'gryfly': 117, 'haiwoo': 118, 'hamfly': 119, 'hergul': 120, 'herthr': 121, 'hoomer': 122, 'hoowar': 123, 'horgre': 124, 'horlar': 125, 'houfin': 126, 'houspa': 127, 'houwre': 128, 'indbun': 129, 'juntit1': 130, 'killde': 131, 'labwoo': 132, 'larspa': 133, 'lazbun': 134, 'leabit': 135, 'leafly': 136, 'leasan': 137, 'lecthr': 138, 'lesgol': 139, 'lesnig': 140, 'lesyel': 141, 'lewwoo': 142, 'linspa': 143, 'lobcur': 144, 'lobdow': 145, 'logshr': 146, 'lotduc': 147, 'louwat': 148, 'macwar': 149, 'magwar': 150, 'mallar3': 151, 'marwre': 152, 'merlin': 153, 'moublu': 154, 'mouchi': 155, 'moudov': 156, 'norcar': 157, 'norfli': 158, 'norhar2': 159, 'normoc': 160, 'norpar': 161, 'norpin': 162, 'norsho': 163, 'norwat': 164, 'nrwswa': 165, 'nutwoo': 166, 'olsfly': 167, 'orcwar': 168, 'osprey': 169, 'ovenbi1': 170, 'palwar': 171, 'pasfly': 172, 'pecsan': 173, 'perfal': 174, 'phaino': 175, 'pibgre': 176, 'pilwoo': 177, 'pingro': 178, 'pinjay': 179, 'pinsis': 180, 'pinwar': 181, 'plsvir': 182, 'prawar': 183, 'purfin': 184, 'pygnut': 185, 'rebmer': 186, 'rebnut': 187, 'rebsap': 188, 'rebwoo': 189, 'redcro': 190, 'redhea': 191, 'reevir1': 192, 'renpha': 193, 'reshaw': 194, 'rethaw': 195, 'rewbla': 196, 'ribgul': 197, 'rinduc': 198, 'robgro': 199, 'rocpig': 200, 'rocwre': 201, 'rthhum': 202, 'ruckin': 203, 'rudduc': 204, 'rufgro': 205, 'rufhum': 206, 'rusbla': 207, 'sagspa1': 208, 'sagthr': 209, 'savspa': 210, 'saypho': 211, 'scatan': 212, 'scoori': 213, 'semplo': 214, 'semsan': 215, 'sheowl': 216, 'shshaw': 217, 'snobun': 218, 'snogoo': 219, 'solsan': 220, 'sonspa': 221, 'sora': 222, 'sposan': 223, 'spotow': 224, 'stejay': 225, 'swahaw': 226, 'swaspa': 227, 'swathr': 228, 'treswa': 229, 'truswa': 230, 'tuftit': 231, 'tunswa': 232, 'veery': 233, 'vesspa': 234, 'vigswa': 235, 'warvir': 236, 'wesblu': 237, 'wesgre': 238, 'weskin': 239, 'wesmea': 240, 'wessan': 241, 'westan': 242, 'wewpew': 243, 'whbnut': 244, 'whcspa': 245, 'whfibi': 246, 'whtspa': 247, 'whtswi': 248, 'wilfly': 249, 'wilsni1': 250, 'wiltur': 251, 'winwre3': 252, 'wlswar': 253, 'wooduc': 254, 'wooscj2': 255, 'woothr': 256, 'y00475': 257, 'yebfly': 258, 'yebsap': 259, 'yehbla': 260, 'yelwar': 261, 'yerwar': 262, 'yetvir': 263}","execution_count":null},{"metadata":{},"cell_type":"markdown","source":"## Model","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"model = Xception(weights='imagenet', include_top=False, input_shape = (150, 150, 3), pooling = 'max')\nfinal_output = Dense(264, activation = 'softmax')(model.output)\nmodel = Model(inputs = model.input, outputs = final_output)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Callback Functions","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"from keras.callbacks import ModelCheckpoint, EarlyStopping, Callback\n\n\n# autosave best Model\nbest_model = ModelCheckpoint(\"model\", monitor='val_accuracy', mode='max',verbose=1, save_best_only=True)\n\nearlystop = EarlyStopping(monitor = 'val_accuracy',\n                          patience = 10,\n                          mode = 'auto',\n                          verbose = 1,\n                          restore_best_weights = True)\n\nacc_thresh = 0.998\n\nclass myCallback(Callback): \n    def on_epoch_end(self, epoch, logs={}): \n        if(logs.get('accuracy') > acc_thresh):   \n          print(\"\\nWe have reached %2.2f%% accuracy, so we will stopping training.\" %(acc_thresh*100))   \n          self.model.stop_training = True\n\ncallbacks = [myCallback(), best_model, earlystop]","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Compiling and Training...","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"model.compile(optimizer='Adam', loss= 'categorical_crossentropy', metrics= ['accuracy'])\nhistory = model.fit(train_generator,\n                              epochs = 100,\n                              steps_per_epoch = len(train_generator),\n                              validation_data = val_generator,\n                              validation_steps = len(val_generator),\n                              callbacks = callbacks,\n                              verbose= 1)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Training in Google Colab","execution_count":null},{"metadata":{},"cell_type":"markdown","source":"Epoch 1/100\n  2/108 [..............................] - ETA: 2:12 - loss: 6.5205 - accuracy: 0.0031WARNING:tensorflow:Callbacks method `on_train_batch_end` is slow compared to the batch time (batch time: 0.6736s vs `on_train_batch_end` time: 1.8212s). Check your callbacks.\n108/108 [==============================] - ETA: 0s - loss: 5.3641 - accuracy: 0.0189\nEpoch 00001: val_accuracy improved from -inf to 0.02851, saving model to model\nWARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow/python/training/tracking/tracking.py:111: Model.state_updates (from tensorflow.python.keras.engine.training) is deprecated and will be removed in a future version.\nInstructions for updating:\nThis property should not be used in TensorFlow 2.0, as updates are applied automatically.\nWARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow/python/training/tracking/tracking.py:111: Layer.updates (from tensorflow.python.keras.engine.base_layer) is deprecated and will be removed in a future version.\nInstructions for updating:\nThis property should not be used in TensorFlow 2.0, as updates are applied automatically.\nINFO:tensorflow:Assets written to: model/assets\n108/108 [==============================] - 315s 3s/step - loss: 5.3641 - accuracy: 0.0189 - val_loss: 6.2479 - val_accuracy: 0.0285\nEpoch 2/100\n108/108 [==============================] - ETA: 0s - loss: 3.8983 - accuracy: 0.1499\nEpoch 00002: val_accuracy improved from 0.02851 to 0.14992, saving model to model\nINFO:tensorflow:Assets written to: model/assets\n108/108 [==============================] - 315s 3s/step - loss: 3.8983 - accuracy: 0.1499 - val_loss: 4.2193 - val_accuracy: 0.1499\nEpoch 3/100\n108/108 [==============================] - ETA: 0s - loss: 2.8843 - accuracy: 0.3127\nEpoch 00003: val_accuracy improved from 0.14992 to 0.22357, saving model to model\nINFO:tensorflow:Assets written to: model/assets\n108/108 [==============================] - 314s 3s/step - loss: 2.8843 - accuracy: 0.3127 - val_loss: 3.7993 - val_accuracy: 0.2236\nEpoch 4/100\n108/108 [==============================] - ETA: 0s - loss: 2.1958 - accuracy: 0.4508\nEpoch 00004: val_accuracy improved from 0.22357 to 0.28890, saving model to model\nINFO:tensorflow:Assets written to: model/assets\n108/108 [==============================] - 314s 3s/step - loss: 2.1958 - accuracy: 0.4508 - val_loss: 3.4109 - val_accuracy: 0.2889\nEpoch 5/100\n108/108 [==============================] - ETA: 0s - loss: 1.5313 - accuracy: 0.5903\nEpoch 00005: val_accuracy did not improve from 0.28890\n108/108 [==============================] - 295s 3s/step - loss: 1.5313 - accuracy: 0.5903 - val_loss: 3.5206 - val_accuracy: 0.2754\nEpoch 6/100\n108/108 [==============================] - ETA: 0s - loss: 1.0594 - accuracy: 0.7054\nEpoch 00006: val_accuracy did not improve from 0.28890\n108/108 [==============================] - 294s 3s/step - loss: 1.0594 - accuracy: 0.7054 - val_loss: 4.3753 - val_accuracy: 0.2518\nEpoch 7/100\n108/108 [==============================] - ETA: 0s - loss: 0.7211 - accuracy: 0.7886\nEpoch 00007: val_accuracy improved from 0.28890 to 0.31884, saving model to model\nINFO:tensorflow:Assets written to: model/assets\n108/108 [==============================] - 313s 3s/step - loss: 0.7211 - accuracy: 0.7886 - val_loss: 3.7360 - val_accuracy: 0.3188\nEpoch 8/100\n108/108 [==============================] - ETA: 0s - loss: 0.4494 - accuracy: 0.8638\nEpoch 00008: val_accuracy did not improve from 0.31884\n108/108 [==============================] - 293s 3s/step - loss: 0.4494 - accuracy: 0.8638 - val_loss: 4.2238 - val_accuracy: 0.3032\nEpoch 9/100\n108/108 [==============================] - ETA: 0s - loss: 0.4121 - accuracy: 0.8782\nEpoch 00009: val_accuracy did not improve from 0.31884\n108/108 [==============================] - 294s 3s/step - loss: 0.4121 - accuracy: 0.8782 - val_loss: 4.6084 - val_accuracy: 0.2960\nEpoch 10/100\n108/108 [==============================] - ETA: 0s - loss: 0.2398 - accuracy: 0.9269\nEpoch 00010: val_accuracy improved from 0.31884 to 0.33072, saving model to model\nINFO:tensorflow:Assets written to: model/assets\n108/108 [==============================] - 319s 3s/step - loss: 0.2398 - accuracy: 0.9269 - val_loss: 4.6120 - val_accuracy: 0.3307\nEpoch 11/100\n108/108 [==============================] - ETA: 0s - loss: 0.2180 - accuracy: 0.9353\nEpoch 00011: val_accuracy did not improve from 0.33072\n108/108 [==============================] - 297s 3s/step - loss: 0.2180 - accuracy: 0.9353 - val_loss: 5.5805 - val_accuracy: 0.2583\nEpoch 12/100\n108/108 [==============================] - ETA: 0s - loss: 0.3296 - accuracy: 0.9043\nEpoch 00012: val_accuracy improved from 0.33072 to 0.33262, saving model to model\nINFO:tensorflow:Assets written to: model/assets\n108/108 [==============================] - 319s 3s/step - loss: 0.3296 - accuracy: 0.9043 - val_loss: 4.5209 - val_accuracy: 0.3326\nEpoch 13/100\n108/108 [==============================] - ETA: 0s - loss: 0.1361 - accuracy: 0.9601\nEpoch 00013: val_accuracy did not improve from 0.33262\n108/108 [==============================] - 297s 3s/step - loss: 0.1361 - accuracy: 0.9601 - val_loss: 5.1286 - val_accuracy: 0.3165\nEpoch 14/100\n108/108 [==============================] - ETA: 0s - loss: 0.1570 - accuracy: 0.9551\nEpoch 00014: val_accuracy did not improve from 0.33262\n108/108 [==============================] - 293s 3s/step - loss: 0.1570 - accuracy: 0.9551 - val_loss: 4.5522 - val_accuracy: 0.3272\nEpoch 15/100\n108/108 [==============================] - ETA: 0s - loss: 0.1478 - accuracy: 0.9566\nEpoch 00015: val_accuracy did not improve from 0.33262\n108/108 [==============================] - 294s 3s/step - loss: 0.1478 - accuracy: 0.9566 - val_loss: 6.0066 - val_accuracy: 0.2815\nEpoch 16/100\n108/108 [==============================] - ETA: 0s - loss: 0.1446 - accuracy: 0.9561\nEpoch 00016: val_accuracy did not improve from 0.33262\n108/108 [==============================] - 296s 3s/step - loss: 0.1446 - accuracy: 0.9561 - val_loss: 5.0713 - val_accuracy: 0.3184\nEpoch 17/100\n108/108 [==============================] - ETA: 0s - loss: 0.0999 - accuracy: 0.9709\nEpoch 00017: val_accuracy improved from 0.33262 to 0.34996, saving model to model\nINFO:tensorflow:Assets written to: model/assets\n108/108 [==============================] - 319s 3s/step - loss: 0.0999 - accuracy: 0.9709 - val_loss: 4.8199 - val_accuracy: 0.3500\nEpoch 18/100\n108/108 [==============================] - ETA: 0s - loss: 0.1214 - accuracy: 0.9654\nEpoch 00018: val_accuracy did not improve from 0.34996\n108/108 [==============================] - 293s 3s/step - loss: 0.1214 - accuracy: 0.9654 - val_loss: 5.2382 - val_accuracy: 0.3338\nEpoch 19/100\n108/108 [==============================] - ETA: 0s - loss: 0.1304 - accuracy: 0.9618\nEpoch 00019: val_accuracy did not improve from 0.34996\n108/108 [==============================] - 293s 3s/step - loss: 0.1304 - accuracy: 0.9618 - val_loss: 5.9411 - val_accuracy: 0.2965\nEpoch 20/100\n108/108 [==============================] - ETA: 0s - loss: 0.1602 - accuracy: 0.9515\nEpoch 00020: val_accuracy did not improve from 0.34996\n108/108 [==============================] - 294s 3s/step - loss: 0.1602 - accuracy: 0.9515 - val_loss: 5.4767 - val_accuracy: 0.3150\nEpoch 21/100\n108/108 [==============================] - ETA: 0s - loss: 0.1765 - accuracy: 0.9484\nEpoch 00021: val_accuracy did not improve from 0.34996\n108/108 [==============================] - 294s 3s/step - loss: 0.1765 - accuracy: 0.9484 - val_loss: 4.9656 - val_accuracy: 0.3288\nEpoch 22/100\n108/108 [==============================] - ETA: 0s - loss: 0.1274 - accuracy: 0.9634\nEpoch 00022: val_accuracy did not improve from 0.34996\n108/108 [==============================] - 295s 3s/step - loss: 0.1274 - accuracy: 0.9634 - val_loss: 5.3694 - val_accuracy: 0.3355\nEpoch 23/100\n108/108 [==============================] - ETA: 0s - loss: 0.0618 - accuracy: 0.9810\nEpoch 00023: val_accuracy did not improve from 0.34996\n108/108 [==============================] - 296s 3s/step - loss: 0.0618 - accuracy: 0.9810 - val_loss: 5.2083 - val_accuracy: 0.2956\nEpoch 24/100\n108/108 [==============================] - ETA: 0s - loss: 0.0993 - accuracy: 0.9726\nEpoch 00024: val_accuracy did not improve from 0.34996\n108/108 [==============================] - 294s 3s/step - loss: 0.0993 - accuracy: 0.9726 - val_loss: 5.9058 - val_accuracy: 0.3053\nEpoch 25/100\n108/108 [==============================] - ETA: 0s - loss: 0.1688 - accuracy: 0.9513\nEpoch 00025: val_accuracy did not improve from 0.34996\n108/108 [==============================] - 295s 3s/step - loss: 0.1688 - accuracy: 0.9513 - val_loss: 6.2194 - val_accuracy: 0.2853\nEpoch 26/100\n108/108 [==============================] - ETA: 0s - loss: 0.1251 - accuracy: 0.9619\nEpoch 00026: val_accuracy did not improve from 0.34996\n108/108 [==============================] - 295s 3s/step - loss: 0.1251 - accuracy: 0.9619 - val_loss: 5.0750 - val_accuracy: 0.3400\nEpoch 27/100\n108/108 [==============================] - ETA: 0s - loss: 0.1368 - accuracy: 0.9598\nEpoch 00027: val_accuracy did not improve from 0.34996\nRestoring model weights from the end of the best epoch.\n108/108 [==============================] - 292s 3s/step - loss: 0.1368 - accuracy: 0.9598 - val_loss: 5.3347 - val_accuracy: 0.3343\nEpoch 00027: early stopping","execution_count":null},{"metadata":{},"cell_type":"markdown","source":"## Plotting Accuracy","execution_count":null},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"plt.plot(history.history['accuracy'])\nplt.plot(history.history['val_accuracy'])\nplt.title('model accuracy')\nplt.ylabel('accuracy')\nplt.xlabel('epoch')\nplt.legend(['train', 'validation'], loc='best')\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"![download.png](attachment:download.png)","attachments":{"download.png":{"image/png":"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"}},"execution_count":null},{"metadata":{},"cell_type":"markdown","source":"### ZIP Trained Model","execution_count":null},{"metadata":{"trusted":true},"cell_type":"code","source":"import shutil\n\nshutil.make_archive('trained_resnet50', 'zip', '/kaggle/working/resnet50')","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Reference\n* [How to run Kaggle Dataset in Google Colab](https://www.kaggle.com/general/74235)\n\n\n\n# Note\n\nPart_1 and Part_2 can be combined by directly training with train_on_batch method (without downloading and re-uploading it)\n\nSee You in the [Final Notebook](https://www.kaggle.com/timothyalexjohn/birdsong-classifier-keras-cnn-part-3-notebook-0) of Notebook_1 series!!","execution_count":null},{"metadata":{},"cell_type":"markdown","source":"### Please Upvote if you liked this Notebook!! ","execution_count":null}],"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":4,"nbformat_minor":4}