Advertisement
Guest User

Untitled

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