{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":70203,"databundleVersionId":8068726,"sourceType":"competition"},{"sourceId":8119872,"sourceType":"datasetVersion","datasetId":4797817}],"dockerImageVersionId":30665,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import tensorflow as tf\nimport keras\nimport numpy as np\nimport pandas as pd\nimport os\nimport matplotlib.pyplot as plt\n\n\ntrain_path = \"/kaggle/input/birdclef24-preprocess-data/train_images\"\n\nIMAGE_SIZE = (224,224)\nBATCH_SIZE = 32\nSEED = 123\nEPOCH=40\nLEARNING_RATE=0.00001\n\ntrain_set = tf.keras.utils.image_dataset_from_directory(\n    train_path, \n    validation_split = 0.2,\n    labels='inferred',\n    label_mode='int',\n    subset='training',\n    seed =SEED, \n    image_size = IMAGE_SIZE,\n    batch_size = BATCH_SIZE)\n\nvalidate_set = tf.keras.utils.image_dataset_from_directory(\n    train_path,\n    validation_split = 0.2,\n    labels='inferred',\n    label_mode='int',\n    subset='validation',\n    seed = SEED,\n    image_size= IMAGE_SIZE,\n    batch_size = BATCH_SIZE)\n\n","metadata":{"execution":{"iopub.status.busy":"2024-04-14T03:42:50.731730Z","iopub.execute_input":"2024-04-14T03:42:50.732611Z","iopub.status.idle":"2024-04-14T03:43:09.461450Z","shell.execute_reply.started":"2024-04-14T03:42:50.732582Z","shell.execute_reply":"2024-04-14T03:43:09.460651Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def plot_some_training_data(train_set):\n    images, labels = next(iter(train_set))\n    n = 0\n    while n <= 5:\n        plt.subplot(2,3,n+1)\n        plt.imshow(images[n].numpy().astype(np.uint8))\n        plt.title(str(labels[n].numpy().astype(np.uint8)))\n        plt.axis('off')\n        n += 1\n    \n    plt.show()\n    \nplot_some_training_data(train_set)","metadata":{"execution":{"iopub.status.busy":"2024-04-14T03:43:09.463119Z","iopub.execute_input":"2024-04-14T03:43:09.463411Z","iopub.status.idle":"2024-04-14T03:43:10.751894Z","shell.execute_reply.started":"2024-04-14T03:43:09.463385Z","shell.execute_reply":"2024-04-14T03:43:10.751029Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model=tf.keras.Sequential([\n    tf.keras.layers.Rescaling(1./255, input_shape=(224,224,3)),\n    tf.keras.layers.Conv2D(64, kernel_size=(3,3), activation='relu'),#, input_shape=(224,224,3)),\n    tf.keras.layers.MaxPool2D(2,2),\n    tf.keras.layers.Conv2D(128, kernel_size=(3,3), activation='relu'),\n    tf.keras.layers.MaxPool2D(2,2),\n    tf.keras.layers.Conv2D(256, kernel_size=(3,3), activation='relu'),\n    tf.keras.layers.MaxPool2D(2,2),\n    tf.keras.layers.Flatten(),\n    tf.keras.layers.Dense(1024, activation='relu'),\n    tf.keras.layers.Dropout(0.4),\n    tf.keras.layers.Dense(128, activation='relu'),\n    tf.keras.layers.Dropout(0.4),\n    tf.keras.layers.Dense(182, activation ='softmax')\n    \n])\nmodel.summary()\n#keras.utils.plot_model(model, '/kaggle/working/model.png', show_shapes=True, show_layer_names=True)","metadata":{"execution":{"iopub.status.busy":"2024-04-14T03:48:17.117681Z","iopub.execute_input":"2024-04-14T03:48:17.118546Z","iopub.status.idle":"2024-04-14T03:48:17.205557Z","shell.execute_reply.started":"2024-04-14T03:48:17.118512Z","shell.execute_reply":"2024-04-14T03:48:17.204575Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\nmodel.compile(\n    optimizer=tf.keras.optimizers.Adam(learning_rate = LEARNING_RATE),\n    loss=tf.keras.losses.SparseCategoricalCrossentropy(),\n    metrics=['accuracy'])\n\npre = model.fit(\n    train_set,\n    validation_data=validate_set,\n    epochs=EPOCH)","metadata":{"execution":{"iopub.status.busy":"2024-04-14T03:48:22.164759Z","iopub.execute_input":"2024-04-14T03:48:22.165609Z","iopub.status.idle":"2024-04-14T03:53:25.816401Z","shell.execute_reply.started":"2024-04-14T03:48:22.165581Z","shell.execute_reply":"2024-04-14T03:53:25.815628Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.save('BirdClef24 mycnn.keras')","metadata":{"execution":{"iopub.status.busy":"2024-04-14T03:46:06.240412Z","iopub.status.idle":"2024-04-14T03:46:06.240728Z","shell.execute_reply.started":"2024-04-14T03:46:06.240576Z","shell.execute_reply":"2024-04-14T03:46:06.240589Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"acc = pre.history['accuracy']\nval_acc = pre.history['val_accuracy']\n\nloss = pre.history['loss']\nval_loss = pre.history['val_loss']\n\nepoch_range = range(EPOCH)\n\nplt.figure(figsize= (8,6))\nplt.subplot(1,2,1)\nplt.plot(epoch_range,acc,label='Training Accuracy')\nplt.plot(epoch_range, val_acc, label='Validation Accuracy')\nplt.legend(loc='center right')\nplt.title('Training and Validation Accuracy')\n\nplt.subplot(1,2,2)\nplt.plot(epoch_range, loss, label='Training loss')\nplt.plot(epoch_range, val_loss, label = 'Validation loss')\nplt.legend(loc='center right')\nplt.title('Training and Validation Loss')\n\nplt.show()\n","metadata":{"execution":{"iopub.status.busy":"2024-04-14T03:53:31.651378Z","iopub.execute_input":"2024-04-14T03:53:31.652082Z","iopub.status.idle":"2024-04-14T03:53:32.140704Z","shell.execute_reply.started":"2024-04-14T03:53:31.652044Z","shell.execute_reply":"2024-04-14T03:53:32.139743Z"},"trusted":true},"execution_count":null,"outputs":[]}]}