Advertisement
Guest User

Untitled

a guest
Mar 28th, 2020
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.41 KB | None | 0 0
  1. from keras.models import Sequential
  2. from keras.layers import  Dropout, Conv2D,MaxPooling2D, Flatten, Dense
  3. from keras_preprocessing.image import ImageDataGenerator
  4. from sklearn.metrics import classification_report, accuracy_score,confusion_matrix
  5. import matplotlib.pyplot as plt
  6. import keras_metrics as km
  7. import numpy as np
  8. import os
  9. import split_folders
  10. import shutil
  11.  
  12.  
  13.  
  14. seedNumbers = [2,3,5,7,11]
  15. batchSize = 32
  16. test_dir_name = '/Users/haikristianlethanh/Desktop/test/val'
  17. train_dir_name = '/Users/haikristianlethanh/Desktop/test/train'
  18. path_to_dataset = '/Users/haikristianlethanh/Desktop/CNN-keras-deep-learning/data_untouch'
  19. splited_dir_path = '/Users/haikristianlethanh/Desktop/test'
  20. presnost = []
  21.  
  22. downloalded = '/Users/haikristianlethanh/Desktop/CNN-keras-deep-learning/Test_downloaded/COMP/'
  23. reference_FRI = '/Users/haikristianlethanh/Desktop/FIRST_Data/113.98142_R165.jpg'
  24. transformed_data_target ='/Users/haikristianlethanh/Desktop/CNN-keras-deep-learning/GREY/COMP/'
  25.  
  26.  
  27. def trainingLoss(history):
  28.     loss = history.history['loss']
  29.     epochs = range(1, len(loss) + 1)
  30.     plt.plot(epochs, loss, color='red', label='Training loss')
  31.     plt.title('Training  loss')
  32.     plt.xlabel('Epochs')
  33.     plt.ylabel('Loss')
  34.     plt.legend()
  35.     plt.show()
  36.  
  37. def metrics(test_set, classifier):
  38.     test_set.reset()
  39.     numfiles = sum([len(files) for r, d, files in os.walk(test_dir_name)])
  40.     print(numfiles)
  41.     Y_pred = classifier.predict_generator(test_set,steps=(numfiles // 32) + 1)
  42.     print(Y_pred.shape)
  43.     classes = test_set.classes[test_set.index_array]
  44.     print(classes)
  45.     test_set.classes
  46.     y_pred = np.argmax(Y_pred, axis=-1)
  47.     accuracy = accuracy_score(y_pred, test_set.classes)
  48.     print("Accuracy score: ", accuracy)
  49.     y_pred
  50.     cm = confusion_matrix(test_set.classes, y_pred)
  51.     print(cm)
  52.     print(classification_report(test_set.classes, y_pred,target_names=test_set.class_indices.keys()))
  53.     return accuracy
  54.    
  55. def initializeModel():
  56.     classifier =  Sequential()
  57.     classifier.add(Conv2D(32, (11, 11), input_shape=(150,150,3), activation='relu'))
  58.     classifier.add(MaxPooling2D(pool_size=(2,2)))
  59.     classifier.add(Conv2D(64, (3, 3),input_shape=(150,150,3), activation='relu'))
  60.     classifier.add(MaxPooling2D(pool_size=(2,2)))
  61.     classifier.add(Conv2D(194, (3, 3),input_shape=(150,150,3), activation='relu'))
  62.     classifier.add(MaxPooling2D(pool_size=(2,2)))
  63.     classifier.add(Dropout(0.2))
  64.     classifier.add(Flatten())
  65.     classifier.add(Dense(units = 194, activation='relu'))
  66.     classifier.add(Dense(units = 4, activation='softmax'))
  67.     recall = km.binary_recall(label=0)
  68.     precision = km.binary_precision(label=1)
  69.     c_precision = km.categorical_precision()
  70.     classifier.compile(optimizer= 'Adam', loss = 'categorical_crossentropy', metrics = [c_precision, 'accuracy', recall, precision])  
  71.     classifier.summary()
  72.     classifier.metrics_names
  73.     return classifier
  74.  
  75.  
  76. def main():  
  77.     for i in seedNumbers:
  78.         split_folders.ratio(path_to_dataset, output=splited_dir_path, seed=i, ratio=(.8, .2)) # default values
  79.         classifier = initializeModel()
  80.         numfiles = sum([len(files) for r, d, files in os.walk(path_to_dataset)])
  81.         train_datagen_1 = ImageDataGenerator(brightness_range=[1,1.5])
  82.         train_datagen_2 = ImageDataGenerator(horizontal_flip=True,vertical_flip=True)
  83.         training_set_1 = train_datagen_1.flow_from_directory(train_dir_name,target_size=(150,150),batch_size=batchSize,class_mode='categorical')
  84.         training_set_2 = train_datagen_2.flow_from_directory(train_dir_name,target_size=(150,150),batch_size=batchSize,class_mode='categorical')
  85.         test_datagen = ImageDataGenerator()
  86.         test_set = test_datagen.flow_from_directory(test_dir_name,
  87.                                                     target_size= (150,150),
  88.                                                     batch_size=batchSize,
  89.                                                     class_mode='categorical',
  90.                                                     shuffle=False)
  91.         history = classifier.fit_generator(training_set_1, steps_per_epoch=numfiles/batchSize, nb_epoch=20)  
  92.         history = classifier.fit_generator(training_set_2, steps_per_epoch=numfiles/batchSize, nb_epoch=20)  
  93.         trainingLoss(history)
  94.         presnost.append(metrics(test_set, classifier))
  95.         shutil.rmtree(splited_dir_path)
  96.         print('Removed')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement