text: # Simple CNN for the MNIST Dataset
  from tensorflow.keras.datasets import mnist
  from tensorflow.keras.models import Sequential
  from tensorflow.keras.layers import Dense
  from tensorflow.keras.layers import Dropout
  from tensorflow.keras.layers import Flatten
  from tensorflow.keras.layers.convolutional import Conv2D
  from tensorflow.keras.layers.convolutional import MaxPooling2D
  from tensorflow.keras.utils import np_utils
  # load data
  (X_train, y_train), (X_test, y_test) = mnist.load_data()
  # reshape to be [samples][width][height][channels]
  X_train = X_train.reshape((X_train.shape[0], 28, 28, 1)).astype('float32')
  X_test = X_test.reshape((X_test.shape[0], 28, 28, 1)).astype('float32')
  # normalize inputs from 0-255 to 0-1
  X_train = X_train / 255
  X_test = X_test / 255
  # one hot encode outputs
  y_train = np_utils.to_categorical(y_train)
  y_test = np_utils.to_categorical(y_test)
  num_classes = y_test.shape[1]
  # define a simple CNN model
  def baseline_model():
  	# create model
  	model = Sequential()
  	model.add(Conv2D(32, (5, 5), input_shape=(28, 28, 1), activation='relu'))
  	model.add(MaxPooling2D())
  	model.add(Dropout(0.2))
  	model.add(Flatten())
  	model.add(Dense(128, activation='relu'))
  	model.add(Dense(num_classes, activation='softmax'))
  	# Compile model
  	model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
  	return model
  # build the model
  model = baseline_model()
  # Fit the model
  model.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=10, batch_size=200)
  # Final evaluation of the model
  scores = model.evaluate(X_test, y_test, verbose=0)
  print("CNN Error: %.2f%%" % (100-scores[1]*100))