|
@@ -0,0 +1,80 @@
|
|
|
+import keras
|
|
|
+from keras.datasets import mnist
|
|
|
+from keras.models import Sequential
|
|
|
+from keras.layers import Dense, Dropout, Flatten
|
|
|
+from keras.layers import Conv2D, MaxPooling2D
|
|
|
+from keras import backend as K
|
|
|
+
|
|
|
+
|
|
|
+def get_options(slack):
|
|
|
+ command_dict = {'functions': {},
|
|
|
+ 'attributes': {}}
|
|
|
+
|
|
|
+ # Modules
|
|
|
+ for d in dir(slack):
|
|
|
+ if not d.startswith('_'):
|
|
|
+ command_dict['functions'][d] = []
|
|
|
+ command_dict['attributes'][d] = []
|
|
|
+ # Iterate through methods and attributes
|
|
|
+ for dd in dir(getattr(slack, d)):
|
|
|
+ if not dd.startswith('_'):
|
|
|
+ # List of methods and attributes
|
|
|
+ l = dir(getattr(getattr(slack, d), dd))
|
|
|
+ # Method (function)
|
|
|
+ if '__call__' in l:
|
|
|
+ command_dict['functions'][d].append(dd)
|
|
|
+ # Attributes
|
|
|
+ else:
|
|
|
+ command_dict['attributes'][d].append(dd)
|
|
|
+
|
|
|
+ return command_dict
|
|
|
+
|
|
|
+def get_data_and_model():
|
|
|
+ batch_size = 128
|
|
|
+ num_classes = 10
|
|
|
+ epochs = 12
|
|
|
+
|
|
|
+ # input image dimensions
|
|
|
+ img_rows, img_cols = 28, 28
|
|
|
+
|
|
|
+ # the data, split between train and test sets
|
|
|
+ (x_train, y_train), (x_test, y_test) = mnist.load_data()
|
|
|
+
|
|
|
+ if K.image_data_format() == 'channels_first':
|
|
|
+ x_train = x_train.reshape(x_train.shape[0], 1, img_rows, img_cols)
|
|
|
+ x_test = x_test.reshape(x_test.shape[0], 1, img_rows, img_cols)
|
|
|
+ input_shape = (1, img_rows, img_cols)
|
|
|
+ else:
|
|
|
+ x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1)
|
|
|
+ x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1)
|
|
|
+ input_shape = (img_rows, img_cols, 1)
|
|
|
+
|
|
|
+ x_train = x_train.astype('float32')
|
|
|
+ x_test = x_test.astype('float32')
|
|
|
+ x_train /= 255
|
|
|
+ x_test /= 255
|
|
|
+ print('x_train shape:', x_train.shape)
|
|
|
+ print(x_train.shape[0], 'train samples')
|
|
|
+ print(x_test.shape[0], 'test samples')
|
|
|
+
|
|
|
+ # convert class vectors to binary class matrices
|
|
|
+ y_train = keras.utils.to_categorical(y_train, num_classes)
|
|
|
+ y_test = keras.utils.to_categorical(y_test, num_classes)
|
|
|
+
|
|
|
+ model = Sequential()
|
|
|
+ model.add(Conv2D(32, kernel_size=(3, 3),
|
|
|
+ activation='relu',
|
|
|
+ input_shape=input_shape))
|
|
|
+ model.add(Conv2D(64, (3, 3), activation='relu'))
|
|
|
+ model.add(MaxPooling2D(pool_size=(2, 2)))
|
|
|
+ model.add(Dropout(0.25))
|
|
|
+ model.add(Flatten())
|
|
|
+ model.add(Dense(128, activation='relu'))
|
|
|
+ model.add(Dropout(0.5))
|
|
|
+ model.add(Dense(num_classes, activation='softmax'))
|
|
|
+
|
|
|
+ model.compile(loss=keras.losses.categorical_crossentropy,
|
|
|
+ optimizer=keras.optimizers.Adadelta(),
|
|
|
+ metrics=['accuracy'])
|
|
|
+
|
|
|
+ return x_train, x_test, y_train, y_test, model
|