diff options
author | Navan Chauhan <navanchauhan@gmail.com> | 2020-01-14 23:03:43 +0530 |
---|---|---|
committer | Navan Chauhan <navanchauhan@gmail.com> | 2020-01-14 23:03:43 +0530 |
commit | 81ae1cfaf44f9f188e35936a660e82a4e9af238e (patch) | |
tree | 81e272000149357b93b8f0e7af809375979642af /tutorials/custom-image-classifier-keras-tensorflow/index.html | |
parent | 562c929cd8b75d08d8ca368e0400c70188cd35a4 (diff) |
Publish deploy 2020-01-14 23:03
Diffstat (limited to 'tutorials/custom-image-classifier-keras-tensorflow/index.html')
-rw-r--r-- | tutorials/custom-image-classifier-keras-tensorflow/index.html | 101 |
1 files changed, 0 insertions, 101 deletions
diff --git a/tutorials/custom-image-classifier-keras-tensorflow/index.html b/tutorials/custom-image-classifier-keras-tensorflow/index.html deleted file mode 100644 index c3518fd..0000000 --- a/tutorials/custom-image-classifier-keras-tensorflow/index.html +++ /dev/null @@ -1,101 +0,0 @@ -<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"/><meta name="og:site_name" content="Navan Chauhan"/><link rel="canonical" href="https://navanchauhan.github.io/SwiftWebsite/tutorials/custom-image-classifier-keras-tensorflow"/><meta name="twitter:url" content="https://navanchauhan.github.io/SwiftWebsite/tutorials/custom-image-classifier-keras-tensorflow"/><meta name="og:url" content="https://navanchauhan.github.io/SwiftWebsite/tutorials/custom-image-classifier-keras-tensorflow"/><title>Creating a Custom Image Classifier using TensorFlow 2.x and Keras for Detecting Malaria | Navan Chauhan</title><meta name="twitter:title" content="Creating a Custom Image Classifier using TensorFlow 2.x and Keras for Detecting Malaria | Navan Chauhan"/><meta name="og:title" content="Creating a Custom Image Classifier using TensorFlow 2.x and Keras for Detecting Malaria | Navan Chauhan"/><meta name="description" content="Short tutorial for creating a custom image classifier using TF 2.0"/><meta name="twitter:description" content="Short tutorial for creating a custom image classifier using TF 2.0"/><meta name="og:description" content="Short tutorial for creating a custom image classifier using TF 2.0"/><meta name="twitter:card" content="summary"/><link rel="stylesheet" href="/styles.css" type="text/css"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><link rel="shortcut icon" href="/images/favicon.png" type="image/png"/><link rel="alternate" href="/feed.rss" type="application/rss+xml" title="Subscribe to Navan Chauhan"/><meta name="twitter:image" content="https://navanchauhan.github.io/SwiftWebsite/images/logo.png"/><meta name="og:image" content="https://navanchauhan.github.io/SwiftWebsite/images/logo.png"/></head><body class="item-page"><header><div class="wrapper"><a class="site-name" href="/">Navan Chauhan</a><nav><ul><li><a href="/posts">Posts</a></li><li><a class="selected" href="/tutorials">Tutorials</a></li></ul></nav></div></header><div class="wrapper"><article><div class="content"><h1>Creating a Custom Image Classifier using TensorFlow 2.x and Keras for Detecting Malaria</h1><p><strong>Done during Google Code-In. Org: Tensorflow.</strong></p><h2>Imports</h2><pre><code>%tensorflow_version 2.x #This is for telling Colab that you want to use TF 2.0, ignore if running on local machine - -from PIL import Image # We use the PIL Library to resize images -import numpy as np -import os -import cv2 -import tensorflow as tf -from tensorflow.keras import datasets, layers, models -import pandas as pd -import matplotlib.pyplot as plt -from keras.models import Sequential -from keras.layers import Conv2D,MaxPooling2D,Dense,Flatten,Dropout -</code></pre><h2>Dataset</h2><h3>Fetching the Data</h3><pre><code>!wget ftp://lhcftp.nlm.nih.gov/Open-Access-Datasets/Malaria/cell_images.zip -!unzip cell_images.zip -</code></pre><h3>Processing the Data</h3><p>We resize all the images as 50x50 and add the numpy array of that image as well as their label names (Infected or Not) to common arrays.</p><pre><code>data = [] -labels = [] - -Parasitized = os.listdir("./cell_images/Parasitized/") -for parasite in Parasitized: - try: - image=cv2.imread("./cell_images/Parasitized/"+parasite) - image_from_array = Image.fromarray(image, 'RGB') - size_image = image_from_array.resize((50, 50)) - data.append(np.array(size_image)) - labels.append(0) - except AttributeError: - print("") - -Uninfected = os.listdir("./cell_images/Uninfected/") -for uninfect in Uninfected: - try: - image=cv2.imread("./cell_images/Uninfected/"+uninfect) - image_from_array = Image.fromarray(image, 'RGB') - size_image = image_from_array.resize((50, 50)) - data.append(np.array(size_image)) - labels.append(1) - except AttributeError: - print("") -</code></pre><h3>Splitting Data</h3><pre><code>df = np.array(data) -labels = np.array(labels) -(X_train, X_test) = df[(int)(0.1*len(df)):],df[:(int)(0.1*len(df))] -(y_train, y_test) = labels[(int)(0.1*len(labels)):],labels[:(int)(0.1*len(labels))] -</code></pre><pre><code>s=np.arange(X_train.shape[0]) -np.random.shuffle(s) -X_train=X_train[s] -y_train=y_train[s] -X_train = X_train/255.0 -</code></pre><h2>Model</h2><h3>Creating Model</h3><p>By creating a sequential model, we create a linear stack of layers.</p><p><em>Note: The input shape for the first layer is 50,50 which corresponds with the sizes of the resized images</em></p><pre><code>model = models.Sequential() -model.add(layers.Conv2D(filters=16, kernel_size=2, padding='same', activation='relu', input_shape=(50,50,3))) -model.add(layers.MaxPooling2D(pool_size=2)) -model.add(layers.Conv2D(filters=32,kernel_size=2,padding='same',activation='relu')) -model.add(layers.MaxPooling2D(pool_size=2)) -model.add(layers.Conv2D(filters=64,kernel_size=2,padding="same",activation="relu")) -model.add(layers.MaxPooling2D(pool_size=2)) -model.add(layers.Dropout(0.2)) -model.add(layers.Flatten()) -model.add(layers.Dense(500,activation="relu")) -model.add(layers.Dropout(0.2)) -model.add(layers.Dense(2,activation="softmax"))#2 represent output layer neurons -model.summary() -</code></pre><h3>Compiling Model</h3><p>We use the Adam optimizer as it is an adaptive learning rate optimization algorithm that's been designed specifically for <em>training</em> deep neural networks, which means it changes its learning rate automatically to get the best results</p><pre><code>model.compile(optimizer="adam", - loss="sparse_categorical_crossentropy", - metrics=["accuracy"]) -</code></pre><h3>Training Model</h3><p>We train the model for 10 epochs on the training data and then validate it using the testing data</p><pre><code>history = model.fit(X_train,y_train, epochs=10, validation_data=(X_test,y_test)) -</code></pre><pre><code>Train on 24803 samples, validate on 2755 samples -Epoch 1/10 -24803/24803 [==============================] - 57s 2ms/sample - loss: 0.0786 - accuracy: 0.9729 - val_loss: 0.0000e+00 - val_accuracy: 1.0000 -Epoch 2/10 -24803/24803 [==============================] - 58s 2ms/sample - loss: 0.0746 - accuracy: 0.9731 - val_loss: 0.0290 - val_accuracy: 0.9996 -Epoch 3/10 -24803/24803 [==============================] - 58s 2ms/sample - loss: 0.0672 - accuracy: 0.9764 - val_loss: 0.0000e+00 - val_accuracy: 1.0000 -Epoch 4/10 -24803/24803 [==============================] - 58s 2ms/sample - loss: 0.0601 - accuracy: 0.9789 - val_loss: 0.0000e+00 - val_accuracy: 1.0000 -Epoch 5/10 -24803/24803 [==============================] - 58s 2ms/sample - loss: 0.0558 - accuracy: 0.9804 - val_loss: 0.0000e+00 - val_accuracy: 1.0000 -Epoch 6/10 -24803/24803 [==============================] - 57s 2ms/sample - loss: 0.0513 - accuracy: 0.9819 - val_loss: 0.0000e+00 - val_accuracy: 1.0000 -Epoch 7/10 -24803/24803 [==============================] - 58s 2ms/sample - loss: 0.0452 - accuracy: 0.9849 - val_loss: 0.3190 - val_accuracy: 0.9985 -Epoch 8/10 -24803/24803 [==============================] - 58s 2ms/sample - loss: 0.0404 - accuracy: 0.9858 - val_loss: 0.0000e+00 - val_accuracy: 1.0000 -Epoch 9/10 -24803/24803 [==============================] - 58s 2ms/sample - loss: 0.0352 - accuracy: 0.9878 - val_loss: 0.0000e+00 - val_accuracy: 1.0000 -Epoch 10/10 -24803/24803 [==============================] - 58s 2ms/sample - loss: 0.0373 - accuracy: 0.9865 - val_loss: 0.0000e+00 - val_accuracy: 1.0000 -</code></pre><h3>Results</h3><pre><code>accuracy = history.history['accuracy'][-1]*100 -loss = history.history['loss'][-1]*100 -val_accuracy = history.history['val_accuracy'][-1]*100 -val_loss = history.history['val_loss'][-1]*100 - -print( - 'Accuracy:', accuracy, - '\nLoss:', loss, - '\nValidation Accuracy:', val_accuracy, - '\nValidation Loss:', val_loss -) -</code></pre><pre><code>Accuracy: 98.64532351493835 -Loss: 3.732407123270176 -Validation Accuracy: 100.0 -Validation Loss: 0.0 -</code></pre><p>We have achieved 98% Accuracy!</p><p><a href="https://colab.research.google.com/drive/1ZswDsxLwYZEnev89MzlL5Lwt6ut7iwp- "Colab Notebook"">Link to Colab Notebook</a></p></div><span>Tagged with: </span><ul class="tag-list"><li><a href="/tags/tutorial">tutorial</a></li><li><a href="/tags/colab">colab</a></li></ul></article></div><footer><p>Made with ❤️ using <a href="https://github.com/johnsundell/publish">Publish</a></p><p><a href="/feed.rss">RSS feed</a></p></footer></body></html>
\ No newline at end of file |