utils.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. import keras
  2. from keras.datasets import mnist
  3. from keras.models import Sequential
  4. from keras.layers import Dense, Dropout, Flatten
  5. from keras.layers import Conv2D, MaxPooling2D
  6. from keras import backend as K
  7. import matplotlib.pyplot as plt
  8. def plot_history(history):
  9. """Plot Results of Keras training"""
  10. plt.style.use("fivethirtyeight")
  11. epochs = list(range(1, len(history["loss"]) + 1))
  12. plt.figure(figsize=(18, 6))
  13. # Losses
  14. plt.subplot(1, 2, 1)
  15. plt.plot(epochs, history["loss"], "-o", ms=10, label="Training Loss")
  16. plt.plot(epochs, history["val_loss"], "-*", ms=10, label="Validation Loss")
  17. plt.legend()
  18. plt.xlabel("Epoch")
  19. plt.ylabel("Loss")
  20. plt.title("Losses")
  21. # Accuracy
  22. plt.subplot(1, 2, 2)
  23. plt.plot(epochs, history["acc"], "-o", ms=10, label="Training Acc")
  24. plt.plot(epochs, history["val_acc"], "-*", ms=10, label="Validation Acc")
  25. plt.legend()
  26. plt.xlabel("Epoch")
  27. plt.ylabel("Acc")
  28. plt.title("Accuracy")
  29. plt.suptitle("Training Curves", y=1.05)
  30. def get_options(slack):
  31. command_dict = {"functions": {}, "attributes": {}}
  32. # Modules
  33. for d in dir(slack):
  34. if not d.startswith("_"):
  35. command_dict["functions"][d] = []
  36. command_dict["attributes"][d] = []
  37. # Iterate through methods and attributes
  38. for dd in dir(getattr(slack, d)):
  39. if not dd.startswith("_"):
  40. # List of methods and attributes
  41. l = dir(getattr(getattr(slack, d), dd))
  42. # Method (function)
  43. if "__call__" in l:
  44. command_dict["functions"][d].append(dd)
  45. # Attributes
  46. else:
  47. command_dict["attributes"][d].append(dd)
  48. return command_dict
  49. def get_data_and_model():
  50. batch_size = 128
  51. num_classes = 10
  52. epochs = 12
  53. # input image dimensions
  54. img_rows, img_cols = 28, 28
  55. # the data, split between train and test sets
  56. (x_train, y_train), (x_test, y_test) = mnist.load_data()
  57. if K.image_data_format() == "channels_first":
  58. x_train = x_train.reshape(x_train.shape[0], 1, img_rows, img_cols)
  59. x_test = x_test.reshape(x_test.shape[0], 1, img_rows, img_cols)
  60. input_shape = (1, img_rows, img_cols)
  61. else:
  62. x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1)
  63. x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1)
  64. input_shape = (img_rows, img_cols, 1)
  65. x_train = x_train.astype("float32")
  66. x_test = x_test.astype("float32")
  67. x_train /= 255
  68. x_test /= 255
  69. print("x_train shape:", x_train.shape)
  70. print(x_train.shape[0], "train samples")
  71. print(x_test.shape[0], "test samples")
  72. # convert class vectors to binary class matrices
  73. y_train = keras.utils.to_categorical(y_train, num_classes)
  74. y_test = keras.utils.to_categorical(y_test, num_classes)
  75. model = Sequential()
  76. model.add(
  77. Conv2D(32, kernel_size=(3, 3), activation="relu", input_shape=input_shape)
  78. )
  79. model.add(Conv2D(64, (3, 3), activation="relu"))
  80. model.add(MaxPooling2D(pool_size=(2, 2)))
  81. model.add(Dropout(0.25))
  82. model.add(Flatten())
  83. model.add(Dense(128, activation="relu"))
  84. model.add(Dropout(0.5))
  85. model.add(Dense(num_classes, activation="softmax"))
  86. model.compile(
  87. loss=keras.losses.categorical_crossentropy,
  88. optimizer=keras.optimizers.Adadelta(),
  89. metrics=["accuracy"],
  90. )
  91. return x_train, x_test, y_train, y_test, model