Instructions to use starpreeda/BrainTumorTest with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Keras
How to use starpreeda/BrainTumorTest with Keras:
# Available backend options are: "jax", "torch", "tensorflow". import os os.environ["KERAS_BACKEND"] = "jax" import keras model = keras.saving.load_model("hf://starpreeda/BrainTumorTest") - Notebooks
- Google Colab
- Kaggle
File size: 4,945 Bytes
e335787 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 | import tensorflow as tf
from tensorflow.keras.applications import EfficientNetB0
from tensorflow.keras.applications.efficientnet import preprocess_input
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Dense, GlobalAveragePooling2D, Dropout, BatchNormalization
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.callbacks import ReduceLROnPlateau, EarlyStopping
import numpy as np
TRAIN_DIR = r'C:\Python_CV\mritest\Training'
TEST_DIR = r'C:\Python_CV\mritest\Testing'
IMG_SIZE = (224, 224)
BATCH_SIZE = 16 # ลด Batch Size ลงเพื่อเพิ่ม Generalization
# 1. Data Augmentation แบบเข้มข้น
train_datagen = ImageDataGenerator(
preprocessing_function=preprocess_input,
rotation_range=15,
width_shift_range=0.1,
height_shift_range=0.1,
shear_range=0.1,
zoom_range=0.15,
horizontal_flip=True,
fill_mode='nearest'
)
test_datagen = ImageDataGenerator(preprocessing_function=preprocess_input)
train_gen = train_datagen.flow_from_directory(
TRAIN_DIR, target_size=IMG_SIZE, batch_size=BATCH_SIZE, class_mode='categorical', shuffle=True
)
test_gen = test_datagen.flow_from_directory(
TEST_DIR, target_size=IMG_SIZE, batch_size=BATCH_SIZE, class_mode='categorical', shuffle=False
)
# 2. สร้างโครงสร้างโมเดล
base_model = EfficientNetB0(weights='imagenet', include_top=False, input_shape=(224, 224, 3))
# Unfreeze 40 ชั้นสุดท้ายของ EfficientNetB0 เพื่อ Fine-Tune
base_model.trainable = True
for layer in base_model.layers[:-40]:
layer.trainable = False
x = base_model.output
x = GlobalAveragePooling2D()(x)
x = BatchNormalization()(x)
x = Dense(256, activation='relu')(x)
x = Dropout(0.4)(x) # ลด Overfitting
outputs = Dense(4, activation='softmax')(x)
model = Model(inputs=base_model.input, outputs=outputs)
# 3. คอมไพล์โมเดลด้วย Learning Rate ต่ำสำหรับ Fine-tuning
model.compile(
optimizer=Adam(learning_rate=1e-4),
loss='categorical_crossentropy',
metrics=['accuracy']
)
# 4. Callbacks ปรับ Learning Rate อัตโนมัติเมื่อ Accuracy เริ่มนิ่ง
callbacks = [
ReduceLROnPlateau(monitor='val_accuracy', factor=0.3, patience=3, verbose=1, min_lr=1e-6),
EarlyStopping(monitor='val_accuracy', patience=7, restore_best_weights=True)
]
# 5. เทรนโมเดล
print("Starting Fine-Tuning Training...")
history = model.fit(
train_gen,
epochs=25,
validation_data=test_gen,
callbacks=callbacks
)
# 6. ประเมินผลความแม่นยำ
test_loss, test_acc = model.evaluate(test_gen)
print(f"\n>>> Final Test Accuracy: {test_acc * 100:.2f}% <<<")
# บันทึกโมเดลไว้ในโฟลเดอร์โครงการ
model.save(r'C:\Python_CV\mritest\efficientnetb0_finetuned_brain_mri.keras')
print("เซฟโมเดลแบบ .keras เรียบร้อยแล้ว!")
from sklearn.metrics import classification_report, confusion_matrix
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
# 1. พยากรณ์ผลบนชุด Testing Data
test_gen.reset()
y_pred_prob = model.predict(test_gen, verbose=1)
y_pred = np.argmax(y_pred_prob, axis=1)
y_true = test_gen.classes
class_labels = list(test_gen.class_indices.keys())
# 2. พิมพ์รายงาน Classification Report (Precision, Recall, F1-score)
print("\n================ Classification Report ================")
print(classification_report(y_true, y_pred, target_names=class_labels))
# 3. วาดกราฟ Confusion Matrix
cm = confusion_matrix(y_true, y_pred)
plt.figure(figsize=(8, 6))
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues',
xticklabels=class_labels, yticklabels=class_labels)
plt.title('Fine-Tuned EfficientNetB0 - Confusion Matrix')
plt.xlabel('Predicted Label')
plt.ylabel('True Label')
plt.show()
# พล็อต กราฟ Loss & Accuracy
acc = history.history['accuracy']
val_acc = history.history['val_accuracy']
loss = history.history['loss']
val_loss = history.history['val_loss']
epochs_range = range(len(acc))
plt.figure(figsize=(12, 5))
plt.subplot(1, 2, 1)
plt.plot(epochs_range, acc, label='Training Accuracy')
plt.plot(epochs_range, val_acc, label='Validation/Test Accuracy')
plt.legend(loc='lower right')
plt.title('Training and Validation Accuracy')
plt.subplot(1, 2, 2)
plt.plot(epochs_range, loss, label='Training Loss')
plt.plot(epochs_range, val_loss, label='Validation/Test Loss')
plt.legend(loc='upper right')
plt.title('Training and Validation Loss')
plt.show()
|