# -*- coding: utf-8 -*- """tumor-classification-using-keras.ipynb Automatically generated by Colaboratory. Original file is located at https://colab.research.google.com/drive/1EgMc5_zGbuWuvrsGd2sg2bVfXYUQXanx # Import Statements """ from zipfile import ZipFile file_name = "brain_tumor_dataset_kaggle.zip" with ZipFile(file_name,'r') as zip: zip.extractall() print("done") import streamlit as st import os import keras from keras.models import Sequential from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout, BatchNormalization from PIL import Image import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.preprocessing import OneHotEncoder encoder = OneHotEncoder() encoder.fit([[0], [1]]) # 0 - Tumor # 1 - Normal """ 1. data list for storing image data in numpy array form 2. paths list for storing paths of all images 3. result list for storing one hot encoded form of target class whether normal or tumor""" # This cell updates result list for images with tumor data = [] paths = [] result = [] for r, d, f in os.walk(r'../content/brain_tumor_dataset/yes'): #r-read, d-directory, f-file for file in f: if '.jpg' in file: paths.append(os.path.join(r, file)) for path in paths: img = Image.open(path) img = img.resize((128,128)) img = np.array(img) if(img.shape == (128,128,3)): data.append(np.array(img)) result.append(encoder.transform([[0]]).toarray()) # This cell updates result list for images without tumor paths = [] for r, d, f in os.walk(r"../content/brain_tumor_dataset/no"): for file in f: if '.jpg' in file: paths.append(os.path.join(r, file)) for path in paths: img = Image.open(path) img = img.resize((128,128)) img = np.array(img) if(img.shape == (128,128,3)): data.append(np.array(img)) result.append(encoder.transform([[1]]).toarray()) data = np.array(data) data.shape result = np.array(result) result = result.reshape(-1,128,128,3) from sklearn.model_selection import train_test_split x_train,x_test,y_train,y_test = train_test_split(data, result, test_size=0.1, shuffle=True, random_state=0) """# Model Building Batch normalization is a technique for training very deep neural networks that standardizes the inputs to a layer for each mini-batch. This has the effect of stabilizing the learning process and dramatically reducing the number of training epochs required to train deep networks. """ model = Sequential() model.add(Conv2D(32, kernel_size=(2, 2), input_shape=(128, 128, 3), padding = 'Same')) model.add(Conv2D(32, kernel_size=(2, 2), activation ='relu', padding = 'Same')) model.add(BatchNormalization()) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.25)) model.add(Conv2D(64, kernel_size = (2,2), activation ='relu', padding = 'Same')) model.add(Conv2D(64, kernel_size = (2,2), activation ='relu', padding = 'Same')) model.add(Conv2D(64, kernel_size = (2,2), activation ='relu', padding = 'Same')) model.add(Conv2D(64, kernel_size = (2,2), activation ='relu', padding = 'Same')) model.add(BatchNormalization()) model.add(MaxPooling2D(pool_size=(2,2), strides=(2,2))) model.add(Dropout(0.25)) model.add(Flatten()) model.add(Dense(512, activation='relu')) model.add(Dropout(0.5)) model.add(Dense(2, activation='softmax')) model.compile(loss = "categorical_crossentropy", optimizer='Adamax') print(model.summary()) y_train.shape history = model.fit(x_train, y_train, epochs = 30, batch_size = 40, verbose = 1,validation_data = (x_test, y_test)) """# Plotting Losses""" plt.plot(history.history['loss']) plt.plot(history.history['val_loss']) plt.title('Model Loss') plt.ylabel('Loss') plt.xlabel('Epoch') plt.legend(['Test', 'Validation'], loc='upper right') plt.show() """# Just Checking the Model""" def names(number): if number==0: return 'Its a Tumor' else: return 'No, Its not a tumor' from matplotlib.pyplot import imshow img = Image.open(r"../content/brain_tumor_dataset/no/11 no.jpg") x = np.array(img.resize((128,128))) x = x.reshape(1,128,128,3) res = model.predict_on_batch(x) classification = np.where(res == np.amax(res))[1][0] imshow(img) print(str(res[0][classification]*100) + '% Confidence This Is A ' + names(classification)) from matplotlib.pyplot import imshow img = Image.open(r"../content/brain_tumor_dataset/no/18 no.jpg") x = np.array(img.resize((128,128))) x = x.reshape(1,128,128,3) res = model.predict_on_batch(x) classification = np.where(res == np.amax(res))[1][0] imshow(img) print(str(res[0][classification]*100) + '% Confidence This Is A ' + names(classification)) """# Thats It !!"""