0% found this document useful (0 votes)
112 views9 pages

ResNet50 Training Code

The document discusses using various Python libraries like Augmentor and split-folders to perform data augmentation and splitting on image datasets. It then loads a ResNet50 model from Keras and attempts to train it on the augmented datasets but encounters errors regarding missing TensorFlow modules.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
112 views9 pages

ResNet50 Training Code

The document discusses using various Python libraries like Augmentor and split-folders to perform data augmentation and splitting on image datasets. It then loads a ResNet50 model from Keras and attempts to train it on the augmented datasets but encounters errors regarding missing TensorFlow modules.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 9

3/10/24, 6:07 PM ResNet50-Copy2

In [1]: !pip install Augmentor #### installing Augmentor library for augmentation of dataset #

Defaulting to user installation because normal site-packages is not writeable


Requirement already satisfied: Augmentor in c:\users\nat\appdata\roaming\python\pytho
n311\site-packages (0.2.12)
Requirement already satisfied: Pillow>=5.2.0 in c:\programdata\anaconda3\envs\project
\lib\site-packages (from Augmentor) (10.1.0)
Requirement already satisfied: tqdm>=4.9.0 in c:\programdata\anaconda3\envs\project\l
ib\site-packages (from Augmentor) (4.66.1)
Requirement already satisfied: numpy>=1.11.0 in c:\programdata\anaconda3\envs\project
\lib\site-packages (from Augmentor) (1.25.2)
Requirement already satisfied: colorama in c:\programdata\anaconda3\envs\project\lib
\site-packages (from tqdm>=4.9.0->Augmentor) (0.4.6)

In [1]: import Augmentor #### importing library ####


p = Augmentor.Pipeline(r"C:\Users\NAT\Desktop\COMMISSION 2.0\RESNET50_FOR AUG\Mites")
p.flip_top_bottom(probability=0.4)
p.rotate_random_90(probability=1.0)
p.shear(probability=0.9, max_shear_left=20, max_shear_right=20)
p.skew(probability=0.3, magnitude=1)
p.skew_corner(probability=0.01, magnitude=1)
p.skew_left_right(probability=0.02, magnitude=1)
p.skew_tilt(probability=0.03, magnitude=1)
p.skew_top_bottom(probability=0.04, magnitude=1)
#p.random_brightness(probability=0.4, min_factor=0, max_factor=0.65)
p.sample(700) #### number of output images after augmentation of Mites ####

Initialised with 49 image(s) found.


Output directory set to C:\Users\NAT\Desktop\COMMISSION 2.0\RESNET50_FOR AUG\Mites\ou
tput.
Processing <PIL.Image.Image image mode=RGB size=853x640 at 0x1C70004CC50>: 11%|█
| 77/700 [00:23<03:09, 3.29 Samples/s]

localhost:8888/nbconvert/html/ResNet50-Copy2.ipynb?download=false 1/9
3/10/24, 6:07 PM ResNet50-Copy2

---------------------------------------------------------------------------
KeyboardInterrupt Traceback (most recent call last)
Cell In[1], line 12
10 p.skew_top_bottom(probability=0.04, magnitude=1)
11 #p.random_brightness(probability=0.4, min_factor=0, max_factor=0.65)
---> 12 p.sample(700)

File ~\AppData\Roaming\Python\Python311\site-packages\Augmentor\Pipeline.py:364, in P
ipeline.sample(self, n, multi_threaded)
362 with tqdm(total=len(augmentor_images), desc="Executing Pipeline", unit=" Samp
les") as progress_bar:
363 with ThreadPoolExecutor(max_workers=None) as executor:
--> 364 for result in executor.map(self, augmentor_images):
365 progress_bar.set_description("Processing %s" % result)
366 progress_bar.update(1)

File C:\ProgramData\anaconda3\Lib\concurrent\futures\_base.py:619, in Executor.map.<l


ocals>.result_iterator()
616 while fs:
617 # Careful not to keep a reference to the popped future
618 if timeout is None:
--> 619 yield _result_or_cancel(fs.pop())
620 else:
621 yield _result_or_cancel(fs.pop(), end_time - time.monotonic())

File C:\ProgramData\anaconda3\Lib\concurrent\futures\_base.py:317, in _result_or_canc


el(***failed resolving arguments***)
315 try:
316 try:
--> 317 return fut.result(timeout)
318 finally:
319 fut.cancel()

File C:\ProgramData\anaconda3\Lib\concurrent\futures\_base.py:451, in Future.result(s


elf, timeout)
448 elif self._state == FINISHED:
449 return self.__get_result()
--> 451 self._condition.wait(timeout)
453 if self._state in [CANCELLED, CANCELLED_AND_NOTIFIED]:
454 raise CancelledError()

File C:\ProgramData\anaconda3\Lib\threading.py:320, in Condition.wait(self, timeout)


318 try: # restore state no matter what (e.g., KeyboardInterrupt)
319 if timeout is None:
--> 320 waiter.acquire()
321 gotit = True
322 else:

KeyboardInterrupt:

In [ ]: p = Augmentor.Pipeline(r"C:\Users\NAT\Desktop\COMMISSION 2.0\RESNET50_FOR AUG\Dandruff


p.flip_top_bottom(probability=0.4)
p.rotate_random_90(probability=1.0)
p.shear(probability=0.9, max_shear_left=20, max_shear_right=20)
p.skew(probability=0.3, magnitude=1)
p.skew_corner(probability=0.01, magnitude=1)
p.skew_left_right(probability=0.02, magnitude=1)
p.skew_tilt(probability=0.03, magnitude=1)
p.skew_top_bottom(probability=0.04, magnitude=1)

localhost:8888/nbconvert/html/ResNet50-Copy2.ipynb?download=false 2/9
3/10/24, 6:07 PM ResNet50-Copy2
#p.random_brightness(probability=0.4, min_factor=0, max_factor=0.65)
p.sample(700) #### number of output images after augmentation of Dandruff ####

In [26]: %cd Desktop\COMMISSION 2.0

[WinError 3] The system cannot find the path specified: 'Desktop\\COMMISSION 2.0'
C:\Users\NAT\Desktop\COMMISSION 2.0

In [2]: !pip install split-folders #### installing splitfolders libary ####

Defaulting to user installation because normal site-packages is not writeable


Requirement already satisfied: split-folders in c:\users\nat\appdata\roaming\python\p
ython311\site-packages (0.5.1)

In [3]: import splitfolders #### importing splitfolders library to automatically split datset

In [27]: input_folder = "INPUT_DATASET_700SAMPLES_02182024" #### input_folder path ####


output = "PROCESSED_DATASET_700SAMPLES_02182024" #### create the output folder path ##
splitfolders.ratio(input_folder, output, seed=42, ratio=(.6, .2, .2)) #### ratio for t

Copying files: 1496 files [00:10, 145.77 files/s]

In [ ]: //////

In [2]: from tensorflow.keras.layers import Conv2D, Flatten, Dense, MaxPool2D, BatchNormalizat


from tensorflow.keras.applications.resnet50 import preprocess_input, decode_prediction
from tensorflow.keras.preprocessing.image import ImageDataGenerator, load_img
from tensorflow.keras.applications.resnet50 import ResNet50
from tensorflow.keras.preprocessing import image
from tensorflow.keras.models import Sequential
from tensorflow.keras.models import Model
import matplotlib.pyplot as plt
import numpy as np

#### importing necessary libraries for training ResNet50 model ####

---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
Cell In[2], line 1
----> 1 from tensorflow.keras.layers import Conv2D, Flatten, Dense, MaxPool2D, BatchN
ormalization, GlobalAveragePooling2D
2 from tensorflow.keras.applications.resnet50 import preprocess_input, decode_p
redictions
3 from tensorflow.keras.preprocessing.image import ImageDataGenerator, load_img

ModuleNotFoundError: No module named 'tensorflow'

In [3]: img_height, img_width = (224,224) #### setting the image height and width ####
batch_size = 32 #### Batch sze for training ####
train_data_dir = r"PROCESSED_DATASET_700SAMPLES_02182024\train" #### location of train
valid_data_dir = r"PROCESSED_DATASET_700SAMPLES_02182024\val" #### location of valid
test_data_dir = r"PROCESSED_DATASET_wmekusmekusCopy\test" #### location of testi

In [3]: train_datagen = ImageDataGenerator (preprocessing_function=preprocess_input,


validation_split=0.4)

train_generator = train_datagen.flow_from_directory(
train_data_dir,

localhost:8888/nbconvert/html/ResNet50-Copy2.ipynb?download=false 3/9
3/10/24, 6:07 PM ResNet50-Copy2
target_size=(img_height, img_width),
batch_size=batch_size,
class_mode='categorical',
subset="training") #### set as training data ####

valid_generator = train_datagen.flow_from_directory(
valid_data_dir, #### same directory as training data ####
target_size=(img_height, img_width),
batch_size=batch_size,
class_mode='categorical',
subset= 'validation') #### set as validation data ####

#### preprocessing #### necessary to be able to start the training process ####

Found 539 images belonging to 2 classes.


Found 118 images belonging to 2 classes.

In [4]: test_generator = train_datagen.flow_from_directory(


test_data_dir, #### same directory as training data ####
target_size=(img_height, img_width),
batch_size=1,
class_mode='categorical',
subset= 'validation') #### set as validation data ####

#### preprocessing #### necessary to be able to start the testing process ####

Found 118 images belonging to 2 classes.

In [6]: x,y=test_generator.next()
x.shape

(1, 416, 416, 3)


Out[6]:

In [7]: #### this is the code for training ####

base_model = ResNet50(include_top=False, weights='imagenet') ### using ResNet50 algori


x = base_model.output #### taking the output of base_model ####
x = GlobalAveragePooling2D()(x) #### adding additional layer ####
x = Dense (1024, activation='relu')(x) #### another additional layer ####
predictions = Dense (train_generator.num_classes, activation='softmax')(x) #### return
model = Model(inputs=base_model.input, outputs=predictions) #### transfer learning. us

for layer in base_model.layers:


layer.trainable = False

model.compile(optimizer = 'adam', loss='categorical_crossentropy', metrics = ['accurac

model.fit(train_generator,
epochs = 10)

localhost:8888/nbconvert/html/ResNet50-Copy2.ipynb?download=false 4/9
3/10/24, 6:07 PM ResNet50-Copy2
WARNING:tensorflow:From C:\ProgramData\anaconda3\envs\Project\Lib\site-packages\keras
\src\backend.py:1398: The name tf.executing_eagerly_outside_functions is deprecated.
Please use tf.compat.v1.executing_eagerly_outside_functions instead.

WARNING:tensorflow:From C:\ProgramData\anaconda3\envs\Project\Lib\site-packages\keras
\src\layers\normalization\batch_normalization.py:979: The name tf.nn.fused_batch_norm
is deprecated. Please use tf.compat.v1.nn.fused_batch_norm instead.

WARNING:tensorflow:From C:\ProgramData\anaconda3\envs\Project\Lib\site-packages\keras
\src\optimizers\__init__.py:309: The name tf.train.Optimizer is deprecated. Please us
e tf.compat.v1.train.Optimizer instead.

Epoch 1/10
WARNING:tensorflow:From C:\ProgramData\anaconda3\envs\Project\Lib\site-packages\keras
\src\utils\tf_utils.py:492: The name tf.ragged.RaggedTensorValue is deprecated. Pleas
e use tf.compat.v1.ragged.RaggedTensorValue instead.

WARNING:tensorflow:From C:\ProgramData\anaconda3\envs\Project\Lib\site-packages\keras
\src\engine\base_layer_utils.py:384: The name tf.executing_eagerly_outside_functions
is deprecated. Please use tf.compat.v1.executing_eagerly_outside_functions instead.

17/17 [==============================] - 82s 4s/step - loss: 1.4117 - accuracy: 0.662


3
Epoch 2/10
17/17 [==============================] - 72s 4s/step - loss: 0.2601 - accuracy: 0.877
6
Epoch 3/10
17/17 [==============================] - 93s 6s/step - loss: 0.1220 - accuracy: 0.962
9
Epoch 4/10
17/17 [==============================] - 78s 4s/step - loss: 0.0593 - accuracy: 0.992
6
Epoch 5/10
17/17 [==============================] - 100s 6s/step - loss: 0.0350 - accuracy: 0.99
81
Epoch 6/10
17/17 [==============================] - 87s 5s/step - loss: 0.0196 - accuracy: 0.998
1
Epoch 7/10
17/17 [==============================] - 100s 6s/step - loss: 0.0122 - accuracy: 1.00
00
Epoch 8/10
17/17 [==============================] - 92s 5s/step - loss: 0.0082 - accuracy: 1.000
0
Epoch 9/10
17/17 [==============================] - 97s 6s/step - loss: 0.0064 - accuracy: 1.000
0
Epoch 10/10
17/17 [==============================] - 105s 6s/step - loss: 0.0044 - accuracy: 1.00
00
<keras.src.callbacks.History at 0x15440015e10>
Out[7]:

In [8]: !pip install pyyaml h5py #### necessary library to be able to save the model ####

model.save('Saved_Model\ResNet50_MiteOrDandruff02182024_700smpls10epoch_Resnet50copy2.

localhost:8888/nbconvert/html/ResNet50-Copy2.ipynb?download=false 5/9
3/10/24, 6:07 PM ResNet50-Copy2
Defaulting to user installation because normal site-packages is not writeable
Requirement already satisfied: pyyaml in c:\programdata\anaconda3\envs\project\lib\si
te-packages (6.0.1)
Requirement already satisfied: h5py in c:\programdata\anaconda3\envs\project\lib\site
-packages (3.10.0)
Requirement already satisfied: numpy>=1.17.3 in c:\programdata\anaconda3\envs\project
\lib\site-packages (from h5py) (1.25.2)
C:\ProgramData\anaconda3\envs\Project\Lib\site-packages\keras\src\engine\training.py:
3103: UserWarning: You are saving your model as an HDF5 file via `model.save()`. This
file format is considered legacy. We recommend using instead the native Keras format,
e.g. `model.save('my_model.keras')`.
saving_api.save_model(

In [9]: #### evaluation of the model using testing dataset ####


#### results will show accruacy % and loss % ####

test_loss, test_acc = model.evaluate(test_generator, verbose=2)


print('\nTest accuracy:', test_acc)

118/118 - 27s - loss: 0.3734 - accuracy: 0.9322 - 27s/epoch - 225ms/step

Test accuracy: 0.9322034120559692

In [10]: #### importing necessary libraries for testing ####

import pandas as pd
import seaborn as sn
import tensorflow as tf

#### testing the saved model ####


#### results will show the accuracy % and generates confusion matrix table ####

model = tf.keras.models.load_model("Saved_Model\ResNet50_MiteOrDandruff02182024_700smp
filenames = test_generator.filenames
nb_samples = len(test_generator)
y_prob=[]
y_act=[]
test_generator.reset()

for _ in range(nb_samples):
X_test,Y_test = test_generator.next()
y_prob.append(model.predict(X_test))
y_act.append(Y_test)

predicted_class = [list(train_generator.class_indices.keys())[i.argmax()] for i in y_p


actual_class = [list(train_generator.class_indices.keys())[i.argmax()] for i in y_act]

out_df = pd.DataFrame(np.vstack([predicted_class,actual_class]).T,columns=['predicted_
confusion_matrix = pd.crosstab (out_df['actual_class'],out_df['predicted_class'], rown

sn.heatmap(confusion_matrix, cmap='Blues', annot=True, fmt='d')


plt.show()
print('test accuracy : {}'.format((np.diagonal (confusion_matrix).sum()/confusion_matr

localhost:8888/nbconvert/html/ResNet50-Copy2.ipynb?download=false 6/9
3/10/24, 6:07 PM ResNet50-Copy2
1/1 [==============================] - 1s 868ms/step
1/1 [==============================] - 0s 156ms/step
1/1 [==============================] - 0s 148ms/step
1/1 [==============================] - 0s 156ms/step
1/1 [==============================] - 0s 150ms/step
1/1 [==============================] - 0s 160ms/step
1/1 [==============================] - 0s 170ms/step
1/1 [==============================] - 0s 151ms/step
1/1 [==============================] - 0s 160ms/step
1/1 [==============================] - 0s 162ms/step
1/1 [==============================] - 0s 155ms/step
1/1 [==============================] - 0s 178ms/step
1/1 [==============================] - 0s 150ms/step
1/1 [==============================] - 0s 152ms/step
1/1 [==============================] - 0s 154ms/step
1/1 [==============================] - 0s 167ms/step
1/1 [==============================] - 0s 159ms/step
1/1 [==============================] - 0s 148ms/step
1/1 [==============================] - 0s 152ms/step
1/1 [==============================] - 0s 156ms/step
1/1 [==============================] - 0s 178ms/step
1/1 [==============================] - 0s 170ms/step
1/1 [==============================] - 0s 168ms/step
1/1 [==============================] - 0s 151ms/step
1/1 [==============================] - 0s 151ms/step
1/1 [==============================] - 0s 165ms/step
1/1 [==============================] - 0s 163ms/step
1/1 [==============================] - 0s 177ms/step
1/1 [==============================] - 0s 157ms/step
1/1 [==============================] - 0s 209ms/step
1/1 [==============================] - 0s 158ms/step
1/1 [==============================] - 0s 155ms/step
1/1 [==============================] - 0s 144ms/step
1/1 [==============================] - 0s 143ms/step
1/1 [==============================] - 0s 161ms/step
1/1 [==============================] - 0s 143ms/step
1/1 [==============================] - 0s 153ms/step
1/1 [==============================] - 0s 156ms/step
1/1 [==============================] - 0s 163ms/step
1/1 [==============================] - 0s 164ms/step
1/1 [==============================] - 0s 158ms/step
1/1 [==============================] - 0s 156ms/step
1/1 [==============================] - 0s 168ms/step
1/1 [==============================] - 0s 162ms/step
1/1 [==============================] - 0s 152ms/step
1/1 [==============================] - 0s 150ms/step
1/1 [==============================] - 0s 144ms/step
1/1 [==============================] - 0s 163ms/step
1/1 [==============================] - 0s 160ms/step
1/1 [==============================] - 0s 151ms/step
1/1 [==============================] - 0s 143ms/step
1/1 [==============================] - 0s 178ms/step
1/1 [==============================] - 0s 155ms/step
1/1 [==============================] - 0s 146ms/step
1/1 [==============================] - 0s 141ms/step
1/1 [==============================] - 0s 147ms/step
1/1 [==============================] - 0s 153ms/step
1/1 [==============================] - 0s 171ms/step
1/1 [==============================] - 0s 147ms/step
1/1 [==============================] - 0s 160ms/step

localhost:8888/nbconvert/html/ResNet50-Copy2.ipynb?download=false 7/9
3/10/24, 6:07 PM ResNet50-Copy2
1/1 [==============================] - 0s 154ms/step
1/1 [==============================] - 0s 146ms/step
1/1 [==============================] - 0s 161ms/step
1/1 [==============================] - 0s 153ms/step
1/1 [==============================] - 0s 156ms/step
1/1 [==============================] - 0s 154ms/step
1/1 [==============================] - 0s 157ms/step
1/1 [==============================] - 0s 159ms/step
1/1 [==============================] - 0s 184ms/step
1/1 [==============================] - 0s 179ms/step
1/1 [==============================] - 0s 162ms/step
1/1 [==============================] - 0s 159ms/step
1/1 [==============================] - 0s 146ms/step
1/1 [==============================] - 0s 158ms/step
1/1 [==============================] - 0s 163ms/step
1/1 [==============================] - 0s 172ms/step
1/1 [==============================] - 0s 172ms/step
1/1 [==============================] - 0s 176ms/step
1/1 [==============================] - 0s 154ms/step
1/1 [==============================] - 0s 161ms/step
1/1 [==============================] - 0s 160ms/step
1/1 [==============================] - 0s 156ms/step
1/1 [==============================] - 0s 159ms/step
1/1 [==============================] - 0s 157ms/step
1/1 [==============================] - 0s 174ms/step
1/1 [==============================] - 0s 179ms/step
1/1 [==============================] - 0s 217ms/step
1/1 [==============================] - 0s 176ms/step
1/1 [==============================] - 0s 175ms/step
1/1 [==============================] - 0s 176ms/step
1/1 [==============================] - 0s 162ms/step
1/1 [==============================] - 0s 167ms/step
1/1 [==============================] - 0s 156ms/step
1/1 [==============================] - 0s 184ms/step
1/1 [==============================] - 0s 161ms/step
1/1 [==============================] - 0s 183ms/step
1/1 [==============================] - 0s 161ms/step
1/1 [==============================] - 0s 165ms/step
1/1 [==============================] - 0s 153ms/step
1/1 [==============================] - 0s 152ms/step
1/1 [==============================] - 0s 149ms/step
1/1 [==============================] - 0s 147ms/step
1/1 [==============================] - 0s 164ms/step
1/1 [==============================] - 0s 157ms/step
1/1 [==============================] - 0s 173ms/step
1/1 [==============================] - 0s 165ms/step
1/1 [==============================] - 0s 162ms/step
1/1 [==============================] - 0s 163ms/step
1/1 [==============================] - 0s 164ms/step
1/1 [==============================] - 0s 151ms/step
1/1 [==============================] - 0s 157ms/step
1/1 [==============================] - 0s 171ms/step
1/1 [==============================] - 0s 165ms/step
1/1 [==============================] - 0s 166ms/step
1/1 [==============================] - 0s 168ms/step
1/1 [==============================] - 0s 159ms/step
1/1 [==============================] - 0s 162ms/step
1/1 [==============================] - 0s 171ms/step

localhost:8888/nbconvert/html/ResNet50-Copy2.ipynb?download=false 8/9
3/10/24, 6:07 PM ResNet50-Copy2

test accuracy : 93.22033898305084

In [25]:

C:\Users\NAT\Desktop\COMMISSION 2.0\Saved_Model

In [ ]:

localhost:8888/nbconvert/html/ResNet50-Copy2.ipynb?download=false 9/9

You might also like