From b096d8002b2fd8b3bcfd7a51022f8991bedd6a02 Mon Sep 17 00:00:00 2001 From: Navan Chauhan Date: Wed, 1 Jan 2020 19:10:44 +0530 Subject: Publish deploy 2020-01-01 19:10 --- feed.rss | 104 ++++++++++++++ images/logo.png | Bin 0 -> 498 bytes index.html | 1 + posts/hello-world/index.html | 1 + posts/index.html | 1 + posts/splitting-zips/index.html | 4 + sitemap.xml | 1 + styles.css | 152 +++++++++++++++++++++ tags/article/index.html | 1 + tags/codesnippet/index.html | 1 + tags/colab/index.html | 1 + tags/helloworld/index.html | 1 + tags/index.html | 1 + tags/tutorial/index.html | 1 + .../index.html | 101 ++++++++++++++ tutorials/index.html | 1 + 16 files changed, 372 insertions(+) create mode 100644 feed.rss create mode 100644 images/logo.png create mode 100644 index.html create mode 100644 posts/hello-world/index.html create mode 100644 posts/index.html create mode 100644 posts/splitting-zips/index.html create mode 100644 sitemap.xml create mode 100644 styles.css create mode 100644 tags/article/index.html create mode 100644 tags/codesnippet/index.html create mode 100644 tags/colab/index.html create mode 100644 tags/helloworld/index.html create mode 100644 tags/index.html create mode 100644 tags/tutorial/index.html create mode 100644 tutorials/custom-image-classifier-keras-tensorflow/index.html create mode 100644 tutorials/index.html diff --git a/feed.rss b/feed.rss new file mode 100644 index 0000000..b1159e5 --- /dev/null +++ b/feed.rss @@ -0,0 +1,104 @@ +Navan ChauhanI try to post tutorials, tips and tricks related to programming, designing and just some science stuffhttps://navanchauhan.github.io/SwiftWebsiteenWed, 1 Jan 2020 19:10:36 +0530Wed, 1 Jan 2020 19:10:36 +0530250https://navanchauhan.github.io/SwiftWebsite/posts/splitting-zipsSplitting ZIPs into Multiple PartsShort code snippet for splitting zips.https://navanchauhan.github.io/SwiftWebsite/posts/splitting-zipsSun, 8 Dec 2019 13:27:00 +0530Splitting ZIPs into Multiple Parts

Tested on macOS

Creating the archive:

zip -r -s 5 oodlesofnoodles.zip website/
+

5 stands for each split files' size (in mb, kb and gb can also be specified)

For encrypting the zip:

zip -er -s 5 oodlesofnoodles.zip website
+

Extracting Files

First we need to collect all parts, then

zip -F oodlesofnoodles.zip --out merged.zip
+
]]>
https://navanchauhan.github.io/SwiftWebsite/tutorials/custom-image-classifier-keras-tensorflowCreating a Custom Image Classifier using Tensorflow 2.x and Keras for Detecting MalariaShort tutorial for creating a custom image classifier using TF 2.0https://navanchauhan.github.io/SwiftWebsite/tutorials/custom-image-classifier-keras-tensorflowSun, 8 Dec 2019 11:27:00 +0530Creating a Custom Image Classifier using Tensorflow 2.x and Keras for Detecting Malaria

Done during Google Code-In. Org: Tensorflow.

Imports

%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
+

Dataset

Fetching the Data

!wget ftp://lhcftp.nlm.nih.gov/Open-Access-Datasets/Malaria/cell_images.zip
+!unzip cell_images.zip
+

Processing the Data

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.

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("")
+

Splitting Data

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))]
+
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
+

Model

Creating Model

By creating a sequential model, we create a linear stack of layers.

Note: The input shape for the first layer is 50,50 which corresponds with the sizes of the resized images

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()
+

Compiling Model

We use the adam optimiser as it is an adaptive learning rate optimization algorithm that's been designed specifically for training deep neural networks, which means it changes its learning rate automaticaly to get the best results

model.compile(optimizer="adam",
+              loss="sparse_categorical_crossentropy",
+             metrics=["accuracy"])
+

Training Model

We train the model for 10 epochs on the training data and then validate it using the testing data

history = model.fit(X_train,y_train, epochs=10, validation_data=(X_test,y_test))
+
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
+

Results

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
+)
+
Accuracy: 98.64532351493835
+Loss: 3.732407123270176
+Validation Accuracy: 100.0
+Validation Loss: 0.0
+

We have achieved 98% Accuracy!

Link to Colab Notebook

]]>
https://navanchauhan.github.io/SwiftWebsite/posts/hello-worldHello WorldMy first post.https://navanchauhan.github.io/SwiftWebsite/posts/hello-worldTue, 16 Apr 2019 17:39:00 +0530Hello World

Why a Hello World post?

Just re-did the entire website using Publish (Publish by John Sundell). So, a new hello world post :)

]]>
\ No newline at end of file diff --git a/images/logo.png b/images/logo.png new file mode 100644 index 0000000..caaf43c Binary files /dev/null and b/images/logo.png differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..37f6df5 --- /dev/null +++ b/index.html @@ -0,0 +1 @@ +Hi | Navan Chauhan

Hi

I try to post tutorials, tips and tricks related to programming, designing and just some science stuff

Latest content

\ No newline at end of file diff --git a/posts/hello-world/index.html b/posts/hello-world/index.html new file mode 100644 index 0000000..2b9572a --- /dev/null +++ b/posts/hello-world/index.html @@ -0,0 +1 @@ +Hello World | Navan Chauhan

Hello World

Why a Hello World post?

Just re-did the entire website using Publish (Publish by John Sundell). So, a new hello world post :)

Tagged with:
\ No newline at end of file diff --git a/posts/index.html b/posts/index.html new file mode 100644 index 0000000..bb82402 --- /dev/null +++ b/posts/index.html @@ -0,0 +1 @@ +Posts | Navan Chauhan

Posts

\ No newline at end of file diff --git a/posts/splitting-zips/index.html b/posts/splitting-zips/index.html new file mode 100644 index 0000000..b65d420 --- /dev/null +++ b/posts/splitting-zips/index.html @@ -0,0 +1,4 @@ +Splitting ZIPs into Multiple Parts | Navan Chauhan

Splitting ZIPs into Multiple Parts

Tested on macOS

Creating the archive:

zip -r -s 5 oodlesofnoodles.zip website/
+

5 stands for each split files' size (in mb, kb and gb can also be specified)

For encrypting the zip:

zip -er -s 5 oodlesofnoodles.zip website
+

Extracting Files

First we need to collect all parts, then

zip -F oodlesofnoodles.zip --out merged.zip
+
Tagged with:
\ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 0000000..d1c8cbc --- /dev/null +++ b/sitemap.xml @@ -0,0 +1 @@ +https://navanchauhan.github.io/SwiftWebsite/postsdaily1.02020-01-01https://navanchauhan.github.io/SwiftWebsite/posts/splitting-zipsmonthly0.52020-01-01https://navanchauhan.github.io/SwiftWebsite/posts/hello-worldmonthly0.52020-01-01https://navanchauhan.github.io/SwiftWebsite/tutorialsdaily1.02020-01-01https://navanchauhan.github.io/SwiftWebsite/tutorials/custom-image-classifier-keras-tensorflowmonthly0.52020-01-01 \ No newline at end of file diff --git a/styles.css b/styles.css new file mode 100644 index 0000000..0422af4 --- /dev/null +++ b/styles.css @@ -0,0 +1,152 @@ +/** +* Publish Foundation theme +* Copyright (c) John Sundell 2019 +* MIT license, see LICENSE file for details +*/ + +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + background: #fff; + color: #000; + font-family: Helvetica, Arial; + text-align: center; +} + +.wrapper { + max-width: 900px; + margin-left: auto; + margin-right: auto; + padding: 40px; + text-align: left; +} + +header { + background-color: #eee; +} + +header .wrapper { + padding-top: 30px; + padding-bottom: 30px; + text-align: center; +} + +header a { + text-decoration: none; +} + +header .site-name { + font-size: 1.5em; + color: #000; + font-weight: bold; +} + +nav { + margin-top: 20px; +} + +nav li { + display: inline-block; +} + +h1 { + margin-bottom: 20px; + font-size: 2em; +} + +h2 { + margin: 20px 0; +} + +p { + margin-bottom: 10px; +} + +a { + color: inherit; +} + +.description { + margin-bottom: 40px; +} + +.item-list > li { + display: block; + padding: 20px; + border-radius: 20px; + background-color: #eee; +} + +.item-list h1 { + margin-bottom: 15px; + font-size: 1.3em; +} + +.item-list p { + margin-bottom: 0; +} + +.tag-list { + margin-bottom: 15px; +} + +.tag-list li, +.tag { + display: inline-block; + background-color: #000; + color: #ddd; + padding: 4px 6px; + border-radius: 5px; + margin-right: 5px; +} + +.tag-list a, +.tag a { + text-decoration: none; +} + +.item-page .tag-list { + display: inline-block; +} + +.content { + margin-bottom: 40px; +} + +.browse-all { + display: block; + margin-bottom: 30px; +} + +.all-tags li { + font-size: 1.4em; + margin-right: 10px; + padding: 6px 10px; +} + +footer { + color: #8a8a8a; +} + +@media (prefers-color-scheme: dark) { + body { + background-color: #222; + } + + body, + header .site-name { + color: #ddd; + } + + .item-list > li { + background-color: #333; + } + + header { + background-color: #000; + } +} diff --git a/tags/article/index.html b/tags/article/index.html new file mode 100644 index 0000000..62b57ff --- /dev/null +++ b/tags/article/index.html @@ -0,0 +1 @@ +Navan Chauhan

Tagged with article

Browse all tags
\ No newline at end of file diff --git a/tags/codesnippet/index.html b/tags/codesnippet/index.html new file mode 100644 index 0000000..06af971 --- /dev/null +++ b/tags/codesnippet/index.html @@ -0,0 +1 @@ +Navan Chauhan

Tagged with code-snippet

Browse all tags
\ No newline at end of file diff --git a/tags/colab/index.html b/tags/colab/index.html new file mode 100644 index 0000000..50170e8 --- /dev/null +++ b/tags/colab/index.html @@ -0,0 +1 @@ +Navan Chauhan

Tagged with colab

Browse all tags
\ No newline at end of file diff --git a/tags/helloworld/index.html b/tags/helloworld/index.html new file mode 100644 index 0000000..add0b1f --- /dev/null +++ b/tags/helloworld/index.html @@ -0,0 +1 @@ +Navan Chauhan

Tagged with hello-world

Browse all tags
\ No newline at end of file diff --git a/tags/index.html b/tags/index.html new file mode 100644 index 0000000..92ab3f5 --- /dev/null +++ b/tags/index.html @@ -0,0 +1 @@ +Navan Chauhan

Browse all tags

\ No newline at end of file diff --git a/tags/tutorial/index.html b/tags/tutorial/index.html new file mode 100644 index 0000000..aad1353 --- /dev/null +++ b/tags/tutorial/index.html @@ -0,0 +1 @@ +Navan Chauhan

Tagged with tutorial

Browse all tags
\ No newline at end of file diff --git a/tutorials/custom-image-classifier-keras-tensorflow/index.html b/tutorials/custom-image-classifier-keras-tensorflow/index.html new file mode 100644 index 0000000..6746e29 --- /dev/null +++ b/tutorials/custom-image-classifier-keras-tensorflow/index.html @@ -0,0 +1,101 @@ +Creating a Custom Image Classifier using Tensorflow 2.x and Keras for Detecting Malaria | Navan Chauhan

Creating a Custom Image Classifier using Tensorflow 2.x and Keras for Detecting Malaria

Done during Google Code-In. Org: Tensorflow.

Imports

%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
+

Dataset

Fetching the Data

!wget ftp://lhcftp.nlm.nih.gov/Open-Access-Datasets/Malaria/cell_images.zip
+!unzip cell_images.zip
+

Processing the Data

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.

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("")
+

Splitting Data

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))]
+
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
+

Model

Creating Model

By creating a sequential model, we create a linear stack of layers.

Note: The input shape for the first layer is 50,50 which corresponds with the sizes of the resized images

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()
+

Compiling Model

We use the adam optimiser as it is an adaptive learning rate optimization algorithm that's been designed specifically for training deep neural networks, which means it changes its learning rate automaticaly to get the best results

model.compile(optimizer="adam",
+              loss="sparse_categorical_crossentropy",
+             metrics=["accuracy"])
+

Training Model

We train the model for 10 epochs on the training data and then validate it using the testing data

history = model.fit(X_train,y_train, epochs=10, validation_data=(X_test,y_test))
+
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
+

Results

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
+)
+
Accuracy: 98.64532351493835
+Loss: 3.732407123270176
+Validation Accuracy: 100.0
+Validation Loss: 0.0
+

We have achieved 98% Accuracy!

Link to Colab Notebook

Tagged with:
\ No newline at end of file diff --git a/tutorials/index.html b/tutorials/index.html new file mode 100644 index 0000000..dc7f9b4 --- /dev/null +++ b/tutorials/index.html @@ -0,0 +1 @@ +Tutorials | Navan Chauhan

Tutorials

\ No newline at end of file -- cgit v1.2.3