Advertisement
Guest User

Untitled

a guest
Feb 17th, 2020
255
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.09 KB | None | 0 0
  1. from google.colab import drive
  2. drive.mount('/content/gdrive')
  3. !ls "/content/gdrive/My Drive/LABSL"
  4. from google.colab import drive
  5. drive.mount('/content/drive')
  6. import os
  7. from PIL import Image
  8. import numpy as np
  9. import seaborn as sb
  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. from keras import regularizers
  28. model = Sequential()
  29. n_filters = 64
  30. model.add(Conv2D(n_filters, (3, 3), input_shape=(50, 50, 3)))
  31. model.add(MaxPooling2D((3, 3)))
  32. model.add(Conv2D(n_filters, (3, 3)))
  33. model.add(MaxPooling2D((3, 3)))
  34. model.add(Flatten())
  35. model.add(Dense(n_filters))
  36. n_class = 43
  37. model.add(Dense(n_class))
  38. model.add(Activation('softmax'))
  39. model.compile(loss='categorical_crossentropy',
  40.               optimizer='Adam',
  41.               metrics=['accuracy'])
  42. ! git clone https://github.com/Dynamech/test.git
  43. train_gen = ImageDataGenerator(rescale = 1/255,
  44.                                   rotation_range = 20,
  45.                                   zoom_range = 0.05,
  46.                                   width_shift_range = 0.1,
  47.                                   height_shift_range = 0.1,
  48.                                   shear_range = 0.05)
  49.  
  50.  
  51. BS = 32
  52. train_flow = train_gen.flow_from_directory(directory = "test/train",
  53.                                            class_mode = "categorical",
  54.                                            target_size = (50, 50),
  55.                                            color_mode = "rgb",
  56.                                            shuffle = True,
  57.                                            batch_size = BS)
  58.  
  59. val_gen = ImageDataGenerator(rescale=1/255)
  60. val_flow = val_gen.flow_from_directory(directory = "test/val",
  61.                                       class_mode = "categorical",
  62.                                       target_size = (50, 50),
  63.                                       color_mode = "rgb",
  64.                                       shuffle = True,
  65.                                       batch_size = BS)
  66. n_train = 27446
  67. n_val = 3921
  68. history = model.fit_generator(train_flow,
  69.                               steps_per_epoch = n_train // BS,
  70.                               epochs = 4,
  71.                               validation_data = val_flow,
  72.                               validation_steps = n_val // BS)
  73. acc = history.history['acc']
  74. val_acc = history.history['val_acc']
  75. loss = history.history['loss']
  76. val_loss = history.history['val_loss']
  77. epochs = range(1, len(acc) + 1)
  78. fig = plt.figure()
  79. plt.plot(epochs, acc, 'b', label='Training accuracy')
  80. plt.plot(epochs, val_acc, 'r', label='Validation accuracy')
  81. plt.title('Training and validation accuracy')
  82. plt.legend()
  83. plt.show()
  84. fig.savefig('trainval_acc.png', dpi=fig.dpi)
  85. fig = plt.figure()
  86. plt.plot(epochs, loss, 'b', label='Training loss')
  87. plt.plot(epochs, val_loss, 'r', label='Validation loss')
  88. plt.title('Training and validation loss')
  89. plt.legend()
  90. plt.show()
  91. fig.savefig('trainval_loss.png', dpi=fig.dpi)
  92. dir_path = os.listdir('test/train')
  93. for subdir in dir_path:
  94.   num = len(os.listdir('test/train/' + str(subdir)))
  95.   print(str(subdir) + ":" + str(num))
  96. number_files = len(dir_path)
  97. print(number_files)
  98. test_gen = ImageDataGenerator(rescale=1/255)
  99. test_flow = test_gen.flow_from_directory(directory = "test/test",
  100.                                       class_mode = "categorical",
  101.                                       target_size = (50, 50),
  102.                                       color_mode = "rgb",
  103.                                       shuffle = False,
  104.                                       batch_size = BS)
  105. n_test = 7842
  106. pred_prob = model.predict_generator(test_flow, steps = (n_test // BS) + 1)
  107. pred = np.argmax(pred_prob, axis=1)
  108. print('Confusion Matrix')
  109. cm = confusion_matrix(test_flow.classes, pred)
  110. print(cm)
  111. target_names = [str(i) for i in range(0,43)]
  112. print(classification_report(test_flow.classes, pred, target_names=target_names))
  113. total = sum(sum(cm))
  114. TP = []; TN = []; FN = []; FP = [];
  115. P = []; N = [];
  116. acc = []; spec = []; sens = [];
  117. print("Class / Accuracy / Sensitivity / Specificity")
  118. for i in np.arange(n_class):
  119.   TP.append(cm[i, i])
  120.   P.append(sum(cm[i,:]))
  121.   N.append(total - P[i])
  122.   FP.append(sum(cm[:,i]) - TP[i])
  123.   FN.append(sum(cm[i,:]) - TP[i])
  124.   TN.append(N[i] - FP[i])
  125.   acc_ = (TP[i] + TN[i])/total
  126.   acc.append(acc_)
  127.   spec_ = TN[i] / (TN[i] + FP[i])
  128.   spec.append(spec_)
  129.   sens_ = TP[i] / (TP[i] + FN[i])
  130.   sens.append(sens_)
  131.   print(str(i) + ' / ' + str(acc_) + ' / ' + str(sens_) + ' / ' + str(spec_))
  132. fig = plt.figure()
  133. sb.heatmap(cm)
  134. plt.show()
  135. fig.savefig('cm.png', dpi=fig.dpi)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement