# TRAINS - Keras with Tensorboard example code, automatic logging model and Tensorboard outputs # # Train a simple deep NN on the MNIST dataset. # Gets to 98.40% test accuracy after 20 epochs # (there is *a lot* of margin for parameter tuning). # 2 seconds per epoch on a K520 GPU. from __future__ import print_function import tempfile import os from keras.callbacks import TensorBoard, ModelCheckpoint from keras.datasets import mnist from keras.models import Sequential from keras.layers.core import Dense, Activation from keras.optimizers import RMSprop from keras.utils import np_utils import tensorflow as tf from trains import Task, Logger # Connecting TRAINS task = Task.init(project_name='examples', task_name='Keras HP optimization base') # the data, shuffled and split between train and test sets nb_classes = 10 (X_train, y_train), (X_test, y_test) = mnist.load_data() X_train = X_train.reshape(60000, 784).astype('float32')/255. X_test = X_test.reshape(10000, 784).astype('float32')/255. print(X_train.shape[0], 'train samples') print(X_test.shape[0], 'test samples') # convert class vectors to binary class matrices Y_train = np_utils.to_categorical(y_train, nb_classes) Y_test = np_utils.to_categorical(y_test, nb_classes) args = {'batch_size': 128, 'epochs': 6, 'layer_1': 512, 'layer_2': 512, 'layer_3': 10, 'layer_4': 512, } args = task.connect(args) model = Sequential() model.add(Dense(args['layer_1'], input_shape=(784,))) model.add(Activation('relu')) # model.add(Dropout(0.2)) model.add(Dense(args['layer_2'])) model.add(Activation('relu')) # model.add(Dropout(0.2)) model.add(Dense(args['layer_3'])) model.add(Activation('softmax')) model2 = Sequential() model2.add(Dense(args['layer_4'], input_shape=(784,))) model2.add(Activation('relu')) model.summary() model.compile(loss='categorical_crossentropy', optimizer=RMSprop(), metrics=['accuracy']) # Advanced: setting model class enumeration labels = dict(('digit_%d' % i, i) for i in range(10)) task.set_model_label_enumeration(labels) output_folder = os.path.join(tempfile.gettempdir(), 'keras_example') board = TensorBoard(log_dir=output_folder, write_images=False) model_store = ModelCheckpoint(filepath=os.path.join(output_folder, 'weight.hdf5')) history = model.fit(X_train, Y_train, batch_size=args['batch_size'], epochs=args['epochs'], callbacks=[board, model_store], validation_data=(X_test, Y_test)) score = model.evaluate(X_test, Y_test, verbose=0) print('Test score:', score[0]) print('Test accuracy:', score[1]) Logger.current_logger().report_scalar(title='evaluate', series='score', value=score[0], iteration=args['epochs']) Logger.current_logger().report_scalar(title='evaluate', series='accuracy', value=score[1], iteration=args['epochs'])