brein_tumor_assignment / train_model.py
saad1BM's picture
Upload 4 files
8aceb0f verified
import tensorflow as tf
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.applications import VGG16
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten, Dropout
import os
DATA_DIR = 'dataset/Training'
IMAGE_SIZE = (224, 224) # VGG16 ke liye standard input size
BATCH_SIZE = 32
NUM_CLASSES = 4 # gliomat_tumor, meningioma_tumor, no_tumor, pituitary_tumor
train_datagen = ImageDataGenerator(
rescale=1./255,
validation_split=0.2, # 20% data validation ke liye use hoga
)
train_generator = train_datagen.flow_from_directory(
DATA_DIR,
target_size=IMAGE_SIZE,
batch_size=BATCH_SIZE,
class_mode='categorical', # 4 classes ke liye 'categorical' use karte hain
subset='training'
)
validation_generator = train_datagen.flow_from_directory(
DATA_DIR,
target_size=IMAGE_SIZE,
batch_size=BATCH_SIZE,
class_mode='categorical',
subset='validation'
)
base_model = VGG16(weights='imagenet',
include_top=False,
input_shape=(IMAGE_SIZE[0], IMAGE_SIZE[1], 3))
for layer in base_model.layers:
layer.trainable = False
model = Sequential([
base_model,
Flatten(), # 2D output ko 1D vector mein badalna
Dense(256, activation='relu'), # Pehli hidden layer
Dropout(0.5), # Overfitting se bachne ke liye
Dense(NUM_CLASSES, activation='softmax') # Output layer (4 classes)
])
model.compile(optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy'])
model.summary()
print("\n--- Starting Model Training ---")
history = model.fit(
train_generator,
epochs=10,
validation_data=validation_generator
)
MODEL_FILENAME = 'brain_tumor_model.keras'
model.save(MODEL_FILENAME)
print(f"\nModel successfully saved as: {MODEL_FILENAME}")