def nn(load_nn=True): """ Output (if `load_nn` is True) ----------------------------- Running 'nn' Loading data ... Loading NN ... Evaluating NN ... Elapsed time: 6.584 sec Test accuracy 0.9896 (error 1.04%) """ print "Running 'nn'" print "Loading data ..." X_train, y_train = load_mnist(mode='train', path='data/') X_test, y_test = load_mnist(mode='test', path='data/') X_train /= 255. X_test /= 255. y_test = one_hot(y_test) if load_nn: print "Loading NN ..." nn = load_model('models/nn.json') else: nn = _train_nn(X_train.copy(), y_train.copy()) print_inline("Evaluating NN ... ") with Stopwatch(verbose=True): y_pred = nn.predict(X_test) acc = accuracy_score(y_test, y_pred) print "\nTest accuracy {0:.4f} (error {1:.2f}%)".format(acc, 100. * (1. - acc))
def gp(load_nn=True): """ Output (if `load_nn` is True) ----------------------------- Running 'gp' Loading data ... Loading NN ... Extracting feature vectors ... Elapsed time: 1.932 sec Training GP ... Elapsed time: 403.602 sec Evaluating GP ... Elapsed time: 22.021 sec Test accuracy 0.9839 (error 1.61%) [!] 1.59% if mean is subtracted (lines 394, 395) """ print "Running 'gp'" print "Loading data ..." X_train, y_train = load_mnist(mode='train', path='data/') X_test, y_test = load_mnist(mode='test', path='data/') X_train /= 255. X_test /= 255. y_test = one_hot(y_test) if load_nn: print "Loading NN ..." nn = load_model('models/nn.json') else: nn = _train_nn(X_train.copy(), y_train.copy()) tts = TrainTestSplitter(shuffle=True, random_seed=1337) indices, _ = tts.split(y_train, train_ratio=800./60000., stratify=True) # 794 X_train = X_train[indices] y_train = one_hot(y_train[indices]) print_inline("Extracting feature vectors ... ") with Stopwatch(verbose=True): nn.forward_pass(X_train) X_train = leaky_relu(nn.layers[13]._last_input) nn.forward_pass(X_test) X_test = leaky_relu(nn.layers[13]._last_input) X_train = StandardScaler(with_std=False).fit_transform(X_train) X_test = StandardScaler(with_std=False).fit_transform(X_test) gp = GPClassifier(algorithm='cg', kernel='rbf', kernel_params=dict( sigma=0.4217, gamma=0.0008511 ), sigma_n=0., max_iter=10000, tol=1e-7, cg_tol=1e-7, n_samples=2000, random_seed=1337) print_inline("Training GP ... ") with Stopwatch(verbose=True): gp.fit(X_train, y_train) print_inline("Evaluating GP ... ") with Stopwatch(verbose=True): y_pred = gp.predict(X_test) acc = accuracy_score(y_test, y_pred) print "\nTest accuracy {0:.4f} (error {1:.2f}%)".format(acc, 100. * (1. - acc))
def logreg(load_nn=True): """ Output (if `load_nn` is True) ----------------------------- Running 'logreg' Loading data ... Loading NN ... Extracting feature vectors ... Elapsed time: 12.054 sec Training LogReg ... Total number of parameters: 1290 Train on 49999 samples, validate on 10001 samples Epoch 1/750 early stopping after 50 ................................ elapsed: 0.70 sec - loss: 0.009 - acc.: 0.9989 - val. loss: 0.008 - val. acc.: 0.9988 Epoch 2/750 early stopping after 50 ................................ elapsed: 2.13 sec - loss: 0.008 - acc.: 0.9991 - val. loss: 0.009 - val. acc.: 0.9986 Epoch 3/750 early stopping after 50 ................................ elapsed: 3.67 sec - loss: 0.008 - acc.: 0.9991 - val. loss: 0.009 - val. acc.: 0.9986 (...) Epoch 89/750 early stopping after 3 ................................ elapsed: 59.28 sec - loss: 0.009 - acc.: 0.9992 - val. loss: 0.014 - val. acc.: 0.9979 Epoch 90/750 early stopping after 2 ................................ elapsed: 59.92 sec - loss: 0.009 - acc.: 0.9992 - val. loss: 0.015 - val. acc.: 0.9977 Epoch 91/750 early stopping after 1 ................................ elapsed: 60.57 sec - loss: 0.009 - acc.: 0.9994 - val. loss: 0.013 - val. acc.: 0.9985 Elapsed time: 60.960 sec Evaluating LogReg ... Elapsed time: 0.057 sec Test accuracy 0.9899 (error 1.01%) """ print "Running 'logreg'" print "Loading data ..." X_train, y_train = load_mnist(mode='train', path='data/') X_test, y_test = load_mnist(mode='test', path='data/') X_train /= 255. X_test /= 255. y_test = one_hot(y_test) if load_nn: print "Loading NN ..." nn = load_model('models/nn.json') else: nn = _train_nn(X_train.copy(), y_train.copy()) print_inline("Extracting feature vectors ... ") with Stopwatch(verbose=True): nn.forward_pass(X_train) X_train = leaky_relu(nn.layers[13]._last_input) nn.forward_pass(X_test) X_test = leaky_relu(nn.layers[13]._last_input) tts = TrainTestSplitter(shuffle=True, random_seed=1337) train, val = tts.split(y_train, train_ratio=50005./60000., stratify=True) X_val = X_train[val] X_train = X_train[train] y_val = one_hot(y_train[val]) y_train = one_hot(y_train[train]) logreg = LogisticRegression(n_batches=32, L2=0.000316, random_seed=1337, optimizer_params=dict( learning_rate=0.001, max_epochs=750, plot=False, early_stopping=50, verbose=True)) print_inline("Training LogReg ... ") with Stopwatch(verbose=True): logreg.fit(X_train, y_train, X_val=X_val, y_val=y_val) print_inline("Evaluating LogReg ... ") with Stopwatch(verbose=True): y_pred = logreg.predict(X_test) acc = accuracy_score(y_test, y_pred) print "\nTest accuracy {0:.4f} (error {1:.2f}%)".format(acc, 100. * (1. - acc))
def _train_nn(X, y): """ Parameters ---------- X : training data y : training labels (not one-hot encoded!) Output ------ Running '_train_nn' Applying augmentation ... Elapsed time: 112.495 sec Training NN ... Total number of parameters: 3142008 Train on 290000 samples, validate on 10000 samples Epoch 1/42 .......................................................................... ...................................................................................... ...................................................................................... ...................................................................................... ...................................................................................... ...................................................................................... ...................................................................................... ...................................................................................... ...................................................................................... ...................................................................................... ...................................................................................... ...................................................................................... elapsed: 327.3 sec - loss: 0.850 - acc.: 0.8904 - val. loss: 0.386 - val. acc.: 0.8889 (...) elapsed: 15714 sec - loss: 0.013 - acc.: 0.9971 - val. loss: 0.040 - val. acc.: 0.9937 Epoch 42/42 .......................................................................... ...................................................................................... ...................................................................................... ...................................................................................... ...................................................................................... ...................................................................................... ...................................................................................... ...................................................................................... ...................................................................................... ...................................................................................... ...................................................................................... ...................................................................................... elapsed: 16100 sec - loss: 0.013 - acc.: 0.9980 - val. loss: 0.038 - val. acc.: 0.9948 Left '_train_nn' """ print "Running '_train_nn'" aug = RandomAugmentator(transform_shape=(28, 28), random_seed=1337) aug.add('RandomRotate', angle=(-5., 7.)) aug.add('RandomGaussian', sigma=(0., 0.5)) aug.add('RandomShift', x_shift=(-1, 1), y_shift=(-1, 1)) print_inline("Applying augmentation ... ") with Stopwatch(verbose=True): X = X.astype(np.float32) X = aug.transform(X, 4) y = np.repeat(y, 5) train, test = TrainTestSplitter(shuffle=True, random_seed=1337).split(y, train_ratio=29./30.) X_train = X[train] y_train = y[train] y_train = one_hot(y_train) X_val = X[test] y_val = y[test] y_val = one_hot(y_val) nn = NNClassifier(layers=[ FullyConnected(1337), Activation('leaky_relu'), Dropout(0.05), FullyConnected(911), Activation('leaky_relu'), Dropout(0.1), FullyConnected(666), Activation('leaky_relu'), Dropout(0.), FullyConnected(333), Activation('leaky_relu'), Dropout(0.), FullyConnected(128), Activation('leaky_relu'), Dropout(0.), FullyConnected(10), Activation('softmax') ], n_batches=1024, shuffle=True, random_seed=1337, save_weights=False, optimizer_params=dict( max_epochs=42, # early_stopping=12, verbose=True, plot=False, # plot_dirpath='tmp/learning_curves{0}/'.format(i), learning_rate=5e-5 )) print "Training NN ..." nn.fit(X_train, y_train, X_val=X_val, y_val=y_val) print "Saving NN to file ..." nn.save('models/nn.json') print "Left '_train_nn'" return nn