Amitato's picture
Update app.py
95cd1d5 verified
import numpy as np
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout
from tensorflow.keras.utils import to_categorical
from sklearn.model_selection import train_test_split
# Constants
image_size = 256
labels = ['glioma_tumor', 'meningioma_tumor', 'pituitary_tumor']
num_classes = len(labels)
from datasets import load_dataset
dataset = load_dataset("Hemg/brain-tumour-dataset")
# Split the dataset into features (X) and labels (y)
X = dataset['image']
y = dataset['label']
# Preprocess labels
y = to_categorical(y, num_classes=num_classes)
# Split the data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Define the CNN model architecture
model = Sequential()
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(image_size, image_size, 3)))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2)))
model.add(Dropout(0.3))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2)))
model.add(Dropout(0.3))
model.add(Conv2D(128, (3, 3), activation='relu'))
model.add(Conv2D(128, (3, 3), activation='relu'))
model.add(Conv2D(128, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2)))
model.add(Dropout(0.3))
model.add(Conv2D(128, (3, 3), activation='relu'))
model.add(Conv2D(256, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2)))
model.add(Dropout(0.3))
model.add(Flatten())
model.add(Dense(512, activation='relu'))
model.add(Dropout(0.7))
model.add(Dense(512, activation='relu'))
model.add(Dropout(0.7))
model.add(Dense(num_classes, activation='softmax'))
model.summary()
# Compile the model
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
# Train the model
history = model.fit(X_train, y_train, epochs=20, validation_split=0.1)
# Evaluate the model
test_loss, test_accuracy = model.evaluate(X_test, y_test)
print(f"Test Loss: {test_loss}, Test Accuracy: {test_accuracy}")
# Plot training history
import matplotlib.pyplot as plt
plt.figure(figsize=(18, 9))
plt.plot(history.history['accuracy'], 'r', label="Training Accuracy")
plt.plot(history.history['val_accuracy'], 'b', label="Validation Accuracy")
plt.legend(loc='upper left')
plt.show()
plt.figure(figsize=(18, 9))
plt.plot(history.history['loss'], 'r', label="Training Loss")
plt.plot(history.history['val_loss'], 'b', label="Validation Loss")
plt.legend(loc='upper right')
plt.show()