CoolFace
Apppublic

KavyaK/DL-Models

sourceHugging Faceupdated 3y agoView on Hugging Face
0likes
cnn_tumor.py155 linesDownload Raw Back to root
1import numpy as np2import matplotlib.pyplot as plt3import cv24import os5import tensorflow as tf6from PIL import Image7from sklearn.model_selection import train_test_split8from sklearn.metrics import classification_report9from tqdm import tqdm10 11image_dir="denv/Models/CNN/tumordata"12no_tumor_images=os.listdir(image_dir+ '/no')13yes_tumor_images=os.listdir(image_dir+ '/yes')14print("--------------------------------------\n")15 16print('The length of NO Tumor images is',len(no_tumor_images))17print('The length of Tumor images is',len(yes_tumor_images))18print("--------------------------------------\n")19 20 21dataset=[]22label=[]23img_siz=(128,128)24 25 26for i , image_name in tqdm(enumerate(no_tumor_images),desc="No Tumor"):27    if(image_name.split('.')[1]=='jpg'):28        image=cv2.imread(image_dir+'/no/'+image_name)29        if image is not None:30            image=Image.fromarray(image,'RGB')31            image=image.resize(img_siz)32            dataset.append(np.array(image))33            label.append(0)34        35        36for i ,image_name in tqdm(enumerate(yes_tumor_images),desc="Tumor"):37    if(image_name.split('.')[1]=='jpg'):38        image=cv2.imread(image_dir+'/yes/'+image_name)39        if image is not None:40            image=Image.fromarray(image,'RGB')41            image=image.resize(img_siz)42            dataset.append(np.array(image))43            label.append(1)44        45        46dataset=np.array(dataset)47label = np.array(label)48 49print("--------------------------------------\n")50print('Dataset Length: ',len(dataset))51print('Label Length: ',len(label))52print("--------------------------------------\n")53 54 55print("--------------------------------------\n")56print("Train-Test Split")57x_train,x_test,y_train,y_test=train_test_split(dataset,label,test_size=0.2,random_state=42)58print("--------------------------------------\n")59 60print("--------------------------------------\n")61print("Normalaising the Dataset. \n")62 63# x_train=x_train.astype('float')/25564# x_test=x_test.astype('float')/255 65 66# Same step above is implemented using tensorflow functions.67 68x_train=tf.keras.utils.normalize(x_train,axis=1)69x_test=tf.keras.utils.normalize(x_test,axis=1)70 71print("--------------------------------------\n")72 73 74model=tf.keras.models.Sequential([75    tf.keras.layers.Conv2D(32,(3,3),activation='relu',input_shape=(128,128,3)),76    tf.keras.layers.MaxPooling2D((2,2)),77    tf.keras.layers.Flatten(),78    tf.keras.layers.Dense(256,activation='relu'),79    tf.keras.layers.Dropout(.5),80    tf.keras.layers.Dense(512,activation='relu'),81    tf.keras.layers.Dense(1,activation='sigmoid')82])83print("--------------------------------------\n")84model.summary()85print("--------------------------------------\n")86 87model.compile(optimizer='adam',88            loss='binary_crossentropy',89            metrics=['accuracy'])90 91 92print("--------------------------------------\n")93print("Training Started.\n")94history=model.fit(x_train,y_train,epochs=5,batch_size =128,validation_split=0.1)95print("Training Finished.\n")96print("--------------------------------------\n")97 98 99# Plot and save accuracy100plt.plot(history.epoch,history.history['accuracy'], label='accuracy')101plt.plot(history.epoch,history.history['val_accuracy'], label = 'val_accuracy')102plt.xlabel('Epoch')103plt.ylabel('Accuracy')104plt.ylim([0, 1])105plt.legend(loc='lower right')106plt.savefig("denv/Models/CNN/results/tumor_accuracy_plot.png")107# Clear the previous plot108plt.clf()109 110# Plot and save loss111plt.plot(history.epoch,history.history['loss'], label='loss')112plt.plot(history.epoch,history.history['val_loss'], label = 'val_loss')113plt.xlabel('Epoch')114plt.ylabel('Loss')115plt.legend(loc='upper right')116plt.savefig("denv/Models/CNN/results/tumor_loss_plot.png")117 118 119print("--------------------------------------\n")120print("Model Evalutaion Phase.\n")121loss,accuracy=model.evaluate(x_test,y_test)122print(f'Accuracy: {round(accuracy*100,2)}')123print("--------------------------------------\n")124y_pred=model.predict(x_test)125y_pred = (y_pred > 0.5).astype(int)126print('classification Report\n',classification_report(y_test,y_pred))127print("--------------------------------------\n")128 129 130print("--------------------------------------\n")131print("Model Prediction.\n")132 133def make_prediction(img,model):134    img=cv2.imread(img)135    img=Image.fromarray(img)136    img=img.resize((128,128))137    img=np.array(img)138    input_img = np.expand_dims(img, axis=0)139    res = model.predict(input_img)140    if res:141        print("Tumor Detected")142    else:143        print("No Tumor")144        145make_prediction('denv/Models/CNN/tumordata/yes/y5.jpg',model)146print("--------------------------------------\n")147make_prediction('denv/Models/CNN/tumordata/no/no7.jpg',model)148print("--------------------------------------\n")149 150 151 152model.save('cnn.h5')153 154 155