Download ResNet/ResNet.py from umaradnaan/deeplearning: direct link, hf CLI and curl.
- Browser
- Download file 5.87 kB
-
https://huggingface.co/umaradnaan/deeplearning/resolve/main/ResNet/ResNet.py
- Command line
-
hf download hf://umaradnaan/deeplearning/ResNet/ResNet.py
-
curl -L -o ResNet.py https://huggingface.co/umaradnaan/deeplearning/resolve/main/ResNet/ResNet.py
5.87 kB
| # -*- coding: utf-8 -*- | |
| """ResNet50.ipynb | |
| Automatically generated by Colaboratory. | |
| Original file is located at | |
| https://colab.research.google.com/drive/1Ztagc2mpxc2YEeFMut7EwFhL8SFY2gAm | |
| """ | |
| import numpy as np | |
| import pandas as pd | |
| from PIL import Image | |
| import pickle | |
| from sklearn.utils import shuffle | |
| from sklearn.model_selection import train_test_split | |
| from tensorflow.keras.preprocessing.image import ImageDataGenerator | |
| from tensorflow.keras.models import Sequential | |
| from tensorflow.keras.layers import Dense | |
| import os | |
| from tensorflow.keras.applications import ResNet50 | |
| from tensorflow.keras.applications.resnet50 import preprocess_input | |
| datagen = ImageDataGenerator(rescale=1.0/255.0, rotation_range=20, width_shift_range=0.2, height_shift_range=0.2, shear_range=0.2, zoom_range=0.2, horizontal_flip=True, fill_mode='nearest') | |
| batch_size = 20 | |
| train_data_dir = '/content/drive/MyDrive/BoneFractureDataset/training' | |
| validation_data_dir = '/content/drive/MyDrive/BoneFractureDataset/testing' | |
| train_generator = datagen.flow_from_directory( train_data_dir, | |
| target_size=(224, 224), | |
| batch_size=batch_size, | |
| class_mode='binary', | |
| shuffle=True ) | |
| validation_generator = datagen.flow_from_directory( | |
| validation_data_dir, | |
| target_size=(224, 224), | |
| batch_size=batch_size, | |
| class_mode='binary', | |
| shuffle=False | |
| ) | |
| !ls /kaggle/input/resnet50-weights/ | |
| !stat /kaggle/input/resnet50-weights/resnet50_weights_tf_dim_ordering_tf_kernels_notop.h5 | |
| !wget https://storage.googleapis.com/tensorflow/keras-applications/resnet/resnet50_weights_tf_dim_ordering_tf_kernels_notop.h5 -P /kaggle/input/resnet50-weights/ | |
| !cat /kaggle/input/resnet50-weights/resnet50_weights_tf_dim_ordering_tf_kernels_notop.h5 | |
| !ls -l /kaggle/input/resnet50-weights/resnet50_weights_tf_dim_ordering_tf_kernels_notop.h5 | |
| !wget https://storage.googleapis.com/tensorflow/keras-applications/resnet/resnet50_weights_tf_dim_ordering_tf_kernels_notop.h5 -P /kaggle/input/resnet50-weights | |
| resModel = Sequential() | |
| resModel.add(ResNet50( | |
| include_top=False, | |
| pooling='avg', | |
| weights=None, | |
| )) | |
| resModel.add(Dense(1, activation='sigmoid')) | |
| for layer in resModel.layers[0].layers[-50:]: | |
| layer.trainable = True | |
| from tensorflow.keras.optimizers import Adam | |
| from tensorflow.keras.callbacks import ReduceLROnPlateau | |
| optimizer = Adam(learning_rate=0.001) | |
| reduce_lr = ReduceLROnPlateau(monitor='val_loss', factor=0.2, patience=3, min_lr=0.0001) | |
| resModel.compile(optimizer=optimizer, loss='binary_crossentropy', metrics=['accuracy']) | |
| epochs = 10 | |
| history = resModel.fit(train_generator, epochs=epochs, validation_data=validation_generator, callbacks=[reduce_lr]) | |
| evaluation = resModel.evaluate(train_generator) | |
| print(f"Test Accuracy: {evaluation[1] * 100:.2f}%") | |
| initial_epoch = 0 | |
| saved_history = { | |
| 'loss': history.history['loss'], | |
| 'accuracy': history.history['accuracy'], | |
| 'val_loss': history.history['val_loss'], | |
| 'val_accuracy': history.history['val_accuracy'], | |
| } | |
| import matplotlib.pyplot as plt | |
| from matplotlib.lines import Line2D | |
| from matplotlib.legend_handler import HandlerLine2D | |
| import numpy as np | |
| initial_epoch = 10 | |
| saved_history = { | |
| 'loss': history.history['loss'], | |
| 'accuracy': history.history['accuracy'], | |
| 'val_loss': history.history['val_loss'], | |
| 'val_accuracy': history.history['val_accuracy'], | |
| } | |
| !ls /kaggle/working | |
| !ls -l /kaggle/working/saved_D201history.npy | |
| !find / -name saved_D201history.npy | |
| from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, log_loss, jaccard_score | |
| true_classes = [1, 0, 1, 1, 0] | |
| predicted_classes = [1, 1, 0, 1, 0] | |
| print(f"Accuracy: {accuracy_score(true_classes, predicted_classes)}") | |
| print(f"Precision: {precision_score(true_classes, predicted_classes)}") | |
| print(f"Recall: {recall_score(true_classes, predicted_classes)}") | |
| print(f"F1 Score: {f1_score(true_classes, predicted_classes)}") | |
| print(f"Log Loss: {log_loss(true_classes, predicted_classes)}") | |
| print(f"Jaccard Score: {jaccard_score(true_classes, predicted_classes)}") | |
| from sklearn.metrics import classification_report | |
| print("\nClassification Report:") | |
| print(classification_report(true_classes, predicted_classes,digits=4)) | |
| from sklearn.metrics import roc_curve, roc_auc_score | |
| import matplotlib.pyplot as plt | |
| from matplotlib.patches import Patch | |
| def save_and_display_gradcam(img_path, heatmap, alpha=0.7): | |
| img = cv2.imread(img_path) | |
| img = cv2.resize(img, (299, 299)) | |
| heatmap = cv2.resize(heatmap, (img.shape[1], img.shape[0])) | |
| heatmap = np.uint8(255 * heatmap) | |
| heatmap = cv2.applyColorMap(heatmap, cv2.COLORMAP_PLASMA) | |
| superimposed_img = cv2.addWeighted(heatmap, alpha, img, 1 - alpha, 0) | |
| plt.figure(figsize=(4, 4)) | |
| plt.imshow(cv2.cvtColor(superimposed_img, cv2.COLOR_BGR2RGB)) | |
| plt.title('GradCAM', fontdict={'family': 'Serif', 'weight': 'bold', 'size': 12}) | |
| plt.axis('off') | |
| plt.tight_layout() | |
| plt.show() | |
| def make_gradcam_heatmap(img_array, model, last_conv_layer_name, pred_index=None): | |
| model.layers[-1].activation = None | |
| grad_model = tf.keras.models.Model( | |
| [model.inputs], [model.get_layer(last_conv_layer_name).output, model.output] | |
| ) | |
| with tf.GradientTape() as tape: | |
| last_conv_layer_output, preds = grad_model(img_array) | |
| if pred_index is None: | |
| pred_index = tf.argmax(preds[0]) | |
| class_channel = preds[:, pred_index] | |
| grads = tape.gradient(class_channel, last_conv_layer_output) | |
| pooled_grads = tf.reduce_mean(grads, axis=(0, 1, 2)) | |
| last_conv_layer_output = last_conv_layer_output[0] | |
| heatmap = last_conv_layer_output @ pooled_grads[..., tf.newaxis] | |
| heatmap = tf.squeeze(heatmap) | |
| heatmap = tf.maximum(heatmap, 0) / tf.math.reduce_max(heatmap) | |
| return heatmap.numpy() | |
| import cv2 | |
| abcd = cv2.imread('/content/drive/MyDrive/BoneFractureDataset/testing/fractured/3.jpg') | |
| plt.imshow(abcd) |