{"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)\nimport tensorflow\nfrom tensorflow import keras\nimport matplotlib.pyplot as plt\nfrom keras.preprocessing.image import  ImageDataGenerator as Imgen\nfrom keras.models import Sequential\nfrom keras.layers import Dense, Dropout, Activation, Flatten\nfrom keras.layers import Conv2D, MaxPooling2D\nfrom matplotlib.pyplot import imshow\nfrom PIL import Image, ImageOps\n#Augmenting the training dataset\ntraingen = Imgen(\n                 rescale=1./255,\n                 shear_range= 0.2,\n                 zoom_range = 0.3,\n                 width_shift_range = 0.2,\n                 height_shift_range  =0.2,\n                 fill_mode = \"nearest\",\n                 validation_split=0.15)\n#Augmenting the testing dataset\ntestgen = Imgen(# rescale the images to 1./255 \n                rescale = 1./255\n                )\ntrainds = traingen.flow_from_directory(\"/kaggle/working/bioverse-hackathon.zip/train\",\n                                       target_size = (130,130),\n                                       seed=123,\n                                       batch_size  = 16,\n                                       subset=\"training\"\n                                      )\nvalds = traingen.flow_from_directory(\"/kaggle/working/bioverse-hackathon.zip/train\",\n                                     target_size = (130,130),\n                                     seed=123,\n                                     batch_size  = 16,\n                                     subset=\"validation\"\n                                      )\ntestds = testgen.flow_from_directory(\"/kaggle/working/bioverse-hackathon.zip/test\",\n                                     target_size = (130,130),\n                                     seed=123,\n                                     batch_size  = 16,\n                                     shuffle=False)\nc = trainds.class_indices\nclasses = list(c.keys())\nclasses\nx,y = next(trainds)                             #function returns the next item in an iterator.\ndef plotImages(x,y):\n    plt.figure(figsize=[15,11])                 #size of the plot\n    for i in range(16):                         #16 images\n        plt.subplot(4,4,i+1)                    #4 by 4 plot    \n        plt.imshow(x[i])                        #Imshow() is a function of matplotlib displays the image\n        plt.title(classes[np.argmax(y[i])])     # Class of the image will be it's title\n        plt.axis(\"off\")\n    plt.show()     \n#Call the plotImages function\nplotImages(x,y)\n# Define your CNN model\n# Import necessary libraries\nimport tensorflow as tf\n\n# Define your CNN model\nmodel = tf.keras.models.Sequential([\n    tf.keras.layers.Conv2D(32, 3, activation='relu', input_shape=(130, 130, 3)),  # Corrected input shape\n    tf.keras.layers.MaxPooling2D(3, 3),\n    tf.keras.layers.Conv2D(64, 3, activation='relu'),\n    tf.keras.layers.MaxPooling2D(3, 3),\n    tf.keras.layers.Conv2D(128, 3, padding='same', activation='relu'),\n    tf.keras.layers.MaxPooling2D(3, 3),\n    tf.keras.layers.Flatten(),\n    tf.keras.layers.Dropout(0.5),\n    tf.keras.layers.Dense(32, activation='relu'),\n    tf.keras.layers.Dense(3, activation='softmax')\n])\n\n# Rest of your code remains unchanged\n\n\n# Define your loss function and optimizer\nloss_fn = tensorflow.keras.losses.CategoricalCrossentropy()\noptimizer = tensorflow.keras.optimizers.Adam()\nepochs = 1\n\n# Iterate through the dataset and perform manual training\nfor epoch in range(epochs):\n    for batch_data, batch_labels in trainds:\n        with tensorflow.GradientTape() as tape:\n            # Forward pass\n            predictions = model(batch_data)\n            loss = loss_fn(batch_labels, predictions)\n        \n        # Compute gradients\n        gradients = tape.gradient(loss, model.trainable_variables)\n        \n        # Update model parameters\n        optimizer.apply_gradients(zip(gradients, model.trainable_variables))\n    \n    # Validation after each epoch\n    val_loss = 0.0\n    val_batches = 0\n    for val_batch_data, val_batch_labels in valds:\n        val_predictions = model(val_batch_data)\n        val_loss += loss_fn(val_batch_labels, val_predictions)\n        val_batches += 1\n    \n    val_loss /= val_batches  # Calculate the average validation loss\n    \n    print(f\"Epoch {epoch+1}/{epochs}, Loss: {loss:.4f}, Val Loss: {val_loss:.4f}\")\ncnn.evaluate(testds)\nepochs = range(len(history.history['normal']))\nplt.plot(epochs, history.history['normal'], 'green', label='Accuracy of Training Data')\nplt.plot(epochs, history.history['beneign'], 'red', label='Accuracy of Validation Data')\nplt.xlabel('Total Epochs')\nplt.ylabel('Accuracy achieved')\nplt.title('Training and Validation Accuracy')\nplt.legend(loc=0)\nplt.figure()\n\ndata = np.ndarray(shape=(1, 130, 130, 3), dtype=np.float32)\nimage = Image.open(\"image(2).jpg\")\nsize = (130, 130)\nimage = ImageOps.fit(image, size, Image.ANTIALIAS)\nimage_array = np.asarray(image)\ndisplay(image)\nnormalized_image_array = (image_array.astype(np.float32) / 127.0) - 1\ndata[0] = normalized_image_array\nprediction = cnn.predict(data)\nprint(prediction)\npredict_index = np.argmax(prediction)\nprint(predict_index)","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"execution_count":null,"outputs":[]}],"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"}}