Advertisement
Guest User

Untitled

a guest
Feb 17th, 2020
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. from google.colab import drive
  2. drive.mount('/content/gdrive')
  3. !ls "/content/gdrive/My Drive/polsl-hanke/SL8"
  4.  
  5. import os
  6. from PIL import Image
  7. import numpy as np
  8. import seaborn as sb
  9.  
  10. import random
  11. import shutil
  12. from keras import backend as K
  13. import matplotlib
  14. matplotlib.use("Agg")
  15. from sklearn.metrics import classification_report
  16. from sklearn.metrics import confusion_matrix
  17. import matplotlib.pyplot as plt
  18. import sys
  19. sys.modules['Image'] = Image
  20. from keras.models import Sequential
  21. from keras.layers import Dense, Dropout, Activation, Flatten
  22. from keras.optimizers import Adam
  23. from keras.layers.normalization import BatchNormalization
  24. from keras.utils import np_utils
  25. from keras.layers import Conv2D, MaxPooling2D, ZeroPadding2D, GlobalAveragePooling2D
  26. from keras.preprocessing.image import ImageDataGenerator
  27.  
  28. from keras import regularizers
  29. model = Sequential()
  30. n_filters = 64
  31. model.add(Conv2D(n_filters, (3, 3), input_shape=(50, 50, 3)))
  32. model.add(MaxPooling2D((3, 3)))
  33. model.add(Conv2D(n_filters, (3, 3)))
  34. model.add(MaxPooling2D((3, 3)))
  35. model.add(Flatten())
  36. model.add(Dense(n_filters))
  37. n_class = 43
  38. model.add(Dense(n_class))
  39. model.add(Activation('softmax'))
  40. model.compile(loss='categorical_crossentropy',
  41. optimizer='Adam',
  42. metrics=['accuracy'])
  43.  
  44. model.build()
  45. model.summary()
  46.  
  47. trainGen = ImageDataGenerator(rescale = 1/255,
  48.                               rotation_range = 20,
  49.                               zoom_range = 0.05,
  50.                               width_shift_range = 0.1,
  51.                               height_shift_range = 0.1,
  52.                               shear_range = 0.05)
  53.  
  54. BS = 32
  55. trainFlow = trainGen.flow_from_directory(directory = "test/train",
  56.                                           class_mode = "categorical",
  57.                                           target_size = (50, 50),
  58.                                           color_mode = "rgb",
  59.                                           shuffle = True,
  60.                                           batch_size = BS)
  61. valueGen = ImageDataGenerator(rescale=1/255)
  62. valueFlow = valueGen.flow_from_directory(directory = "test/val",
  63.                                           class_mode = "categorical",
  64.                                           target_size = (50, 50),
  65.                                           color_mode = "rgb",
  66.                                           shuffle = True,
  67.                                           batch_size = BS)
  68.  
  69. n_train = 27446
  70. n_val = 3921
  71. fit = model.fit_generator(trainFlow,
  72.                           steps_per_epoch = n_train // BS,
  73.                           epochs = 4,
  74.                           validation_data = valueFlow,
  75.                           validation_steps = n_val // BS)
  76.  
  77. acc = fit.history['acc']
  78. valAcc = fit.history['val_acc']
  79. loss = fit.history['loss']
  80. valueLoss = fit.history['val_loss']
  81. epochs = range(1, len(acc) + 1)
  82.  
  83. fig = plt.figure()
  84. plt.plot(epochs, acc, 'b', label='Training accuracy')
  85. plt.plot(epochs, valAcc, 'r', label='Validation accuracy')
  86. plt.title('Training and validation accuracy')
  87. plt.legend()
  88. fig.savefig('trainAcc.png', dpi=fig.dpi)
  89.  
  90. fig = plt.figure()
  91. plt.plot(epochs, loss, 'b', label='Training loss')
  92. plt.plot(epochs, valueLoss, 'r', label='Validation loss')
  93. plt.title('Training and validation loss')
  94. plt.legend()
  95. fig.savefig('trainLoss.png', dpi=fig.dpi)
  96.  
  97. dir_path = os.listdir('test/train')
  98. for subdir in dir_path:
  99. num = len(os.listdir('test/train/' + str(subdir)))
  100.  print(str(subdir) + ":" + str(num))
  101. number_files = len(dir_path)
  102. print(number_files)
  103.  
  104. testGen = ImageDataGenerator(rescale=1/255)
  105. testFlow = testGen.flow_from_directory(directory = "test/test",
  106.                                       class_mode = "categorical",
  107.                                       target_size = (50, 50),
  108.                                       color_mode = "rgb",
  109.                                       shuffle = False,
  110.                                       batch_size = BS)
  111.  
  112. n_test = 7842
  113. pred_prob = model.predict_generator(testFlow, steps = (n_test // BS) + 1)
  114.  
  115. pred = np.argmax(pred_prob, axis=1)
  116. print('Confusion Matrix')
  117. confusionMatrix = confusion_matrix(testFlow.classes, pred)
  118. print(confusionMatrix)
  119. namesTarget = [str(i) for i in range(0,43)]
  120. print(classification_report(testFlow.classes, pred, namesTarget=namesTarget))
  121.  
  122. result = sum(sum(confusionMatrix))
  123. TP = [];
  124. TN = [];
  125. FN = [];
  126. FP = [];
  127. P = [];
  128. N = [];
  129. accuracy = [];
  130. specificity = [];
  131. sensitivity = [];
  132. print("Class / Accuracyuracy / Sensitivityitivity / Specificityificity")
  133. for i in np.arange(n_class):
  134.   TP.append(confusionMatrix[i, i])
  135.   P.append(sum(ConfusionMatrix[i,:]))
  136.   N.append(result - P[i])
  137.   FP.append(sum(confusionMatrix[:,i]) - TP[i])
  138.   FN.append(sum(confusionMatrix[i,:]) - TP[i])
  139.   TN.append(N[i] - FP[i])
  140.   accuracy_ = (TP[i] + TN[i])/result
  141.   accuracy.append(accuracy_)
  142.   specificity_ = TN[i] / (TN[i] + FP[i])
  143.   specificity.append(specificity_)
  144.   sensitivity_ = TP[i] / (TP[i] + FN[i])
  145.   sensitivity.append(sensitivity_)
  146.   print(str(i) + ' / ' + str(accuracy_) + ' / ' + str(sensitivity_) + ' /
  147.  ' + str(specificity_))
  148.  
  149. fig = plt.figure()
  150. sb.heatmap(confusionMatrix)
  151. fig.savefig('confusionMatrix.png', dpi=fig.dpi)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement