def run(): # Prepare data dataset = dp.datasets.MNIST() x, y = dataset.data(flat=True) x = x.astype(dp.float_)/255.0 y = y.astype(dp.int_) train_idx, test_idx = dataset.split() x_train = x[train_idx] y_train = y[train_idx] x_test = x[test_idx] y_test = y[test_idx] train_input = dp.SupervisedInput(x_train, y_train, batch_size=128) test_input = dp.SupervisedInput(x_test, y_test) # Setup neural network nn = dp.NeuralNetwork( layers=[ dp.Dropout(0.2), dp.DropoutFullyConnected( n_output=800, dropout=0.5, weights=dp.Parameter(dp.NormalFiller(sigma=0.01), penalty=('l2', 0.00001), monitor=True), ), dp.Activation('relu'), dp.DropoutFullyConnected( n_output=800, dropout=0.5, weights=dp.Parameter(dp.NormalFiller(sigma=0.01), penalty=('l2', 0.00001), monitor=True), ), dp.Activation('relu'), dp.DropoutFullyConnected( n_output=dataset.n_classes, weights=dp.Parameter(dp.NormalFiller(sigma=0.01), penalty=('l2', 0.00001), monitor=True), ), dp.MultinomialLogReg(), ], ) # Train neural network def valid_error(): return nn.error(test_input) trainer = dp.StochasticGradientDescent( max_epochs=50, learn_rule=dp.Momentum(learn_rate=0.1, momentum=0.9), ) trainer.train(nn, train_input, valid_error) # Visualize weights from first layer W = next(np.array(layer.params()[0].values) for layer in nn.layers if isinstance(layer, dp.FullyConnected)) W = np.reshape(W.T, (-1, 28, 28)) dp.misc.img_save(dp.misc.img_tile(dp.misc.img_stretch(W)), os.path.join('mnist', 'mlp_dropout_weights.png')) # Evaluate on test data error = nn.error(test_input) print('Test error rate: %.4f' % error)
def run(): # Prepare data dataset = dp.datasets.MNIST() x, y = dataset.data(flat=True) x = x.astype(dp.float_) y = y.astype(dp.int_) train_idx, test_idx = dataset.split() x_train = x[train_idx] y_train = y[train_idx] x_test = x[test_idx] y_test = y[test_idx] scaler = dp.UniformScaler(high=255.) x_train = scaler.fit_transform(x_train) x_test = scaler.transform(x_test) batch_size = 128 train_input = dp.SupervisedInput(x_train, y_train, batch_size=batch_size) test_input = dp.SupervisedInput(x_test, y_test) # Setup neural network net = dp.NeuralNetwork( layers=[ dp.FullyConnected( n_output=800, weights=dp.Parameter(dp.AutoFiller(), weight_decay=0.0001), ), dp.Activation('relu'), dp.FullyConnected( n_output=800, weights=dp.Parameter(dp.AutoFiller(), weight_decay=0.0001), ), dp.Activation('relu'), dp.FullyConnected( n_output=dataset.n_classes, weights=dp.Parameter(dp.AutoFiller(), weight_decay=0.0001), ), dp.MultinomialLogReg(), ], ) # Train neural network def val_error(): return net.error(test_input) trainer = dp.StochasticGradientDescent( max_epochs=25, learn_rule=dp.Momentum(learn_rate=0.1, momentum=0.9), ) trainer.train(net, train_input, val_error) # Visualize weights from first layer W = next(np.array(layer.params()[0].array) for layer in net.layers if isinstance(layer, dp.FullyConnected)) W = np.reshape(W.T, (-1, 28, 28)) filepath = os.path.join('mnist', 'mlp_weights.png') dp.misc.img_save(dp.misc.img_tile(dp.misc.img_stretch(W)), filepath) # Evaluate on test data error = net.error(test_input) print('Test error rate: %.4f' % error)
def run(self, epochs, training_frames, testing_frames): for epoch in range(1, epochs + 1): print "Epoch %d:" % epoch learn_rate = 0.0001 * 1 / float(epoch) self.trainer = dp.StochasticGradientDescent( max_epochs=1, learn_rule=dp.RMSProp(learn_rate=learn_rate, decay=0.9, max_scaling=1e3), ) if training_frames > 0: # play number of frames with training and epsilon annealing print " Training for %d frames" % training_frames training_scores = self.play_games(training_frames, epoch, train=True) if testing_frames > 0: # play number of frames without training and without epsilon annealing print " Testing for %d frames" % testing_frames self.test_game_scores.append( self.play_games(testing_frames, epoch, train=False, epsilon=self.test_epsilon)) # Pick random states to calculate Q-values for if self.random_states is None and self.memory.count > self.nr_random_states: print " Picking %d random states for Q-values" % self.nr_random_states self.random_states = self.memory.get_minibatch( self.nr_random_states)[0] # Do not calculate Q-values when memory is empty if self.random_states is not None: # calculate Q-values qvalues = self.nnet.predict(self.random_states) assert qvalues.shape[0] == self.nr_random_states assert qvalues.shape[1] == self.number_of_actions max_qvalues = np.max(qvalues, axis=1) assert max_qvalues.shape[0] == self.nr_random_states assert len(max_qvalues.shape) == 1 avg_qvalue = np.mean(max_qvalues) else: avg_qvalue = 0
def train_network(model, x_train, n_epochs=1000, learn_rate=0.2, batch_size=64, seq_size=50, epoch_size=100): recurrent_nodes, fc_out = model n_classes = fc_out.n_out recurrent_graph = RecurrentGraph( recurrent_nodes=recurrent_nodes, seq_size=seq_size, batch_size=batch_size, cyclic=True, dropout=0.5 ) net = dp.NeuralNetwork( layers=[ OneHot(n_classes=n_classes), Reshape((seq_size, batch_size, -1)), recurrent_graph, Reshape((seq_size*batch_size, -1)), fc_out, ], loss=dp.SoftmaxCrossEntropy(), ) net.phase = 'train' # Prepare network inputs train_input = SupervisedSequenceInput( x_train, seq_size=seq_size, batch_size=batch_size, epoch_size=epoch_size ) # Train network try: trainer = dp.StochasticGradientDescent( max_epochs=n_epochs, min_epochs=n_epochs, learn_rule=dp.RMSProp(learn_rate=learn_rate), ) test_error = None trainer.train(net, train_input, test_error) except KeyboardInterrupt: pass return recurrent_nodes, fc_out
def run(): # Prepare data dataset = dp.datasets.MNIST() x, y = dataset.data() x = x.astype(dp.float_)[:, np.newaxis, :, :] y = y.astype(dp.int_) train_idx, test_idx = dataset.split() x_train = x[train_idx] y_train = y[train_idx] x_test = x[test_idx] y_test = y[test_idx] scaler = dp.UniformScaler(high=255.) x_train = scaler.fit_transform(x_train) x_test = scaler.transform(x_test) batch_size = 128 train_input = dp.SupervisedInput(x_train, y_train, batch_size=batch_size) test_input = dp.SupervisedInput(x_test, y_test) # Setup neural network net = dp.NeuralNetwork(layers=[ dp.Convolutional( n_filters=32, filter_shape=(5, 5), weights=dp.Parameter(dp.AutoFiller(), weight_decay=0.0001), ), dp.Activation('relu'), dp.Pool( win_shape=(3, 3), strides=(2, 2), method='max', ), dp.Convolutional( n_filters=64, filter_shape=(5, 5), weights=dp.Parameter(dp.AutoFiller(), weight_decay=0.0001), ), dp.Activation('relu'), dp.Pool( win_shape=(3, 3), strides=(2, 2), method='max', ), dp.Flatten(), dp.FullyConnected( n_output=128, weights=dp.Parameter(dp.AutoFiller()), ), dp.FullyConnected( n_output=dataset.n_classes, weights=dp.Parameter(dp.AutoFiller()), ), dp.MultinomialLogReg(), ], ) # Train neural network def val_error(): return net.error(test_input) trainer = dp.StochasticGradientDescent( max_epochs=15, learn_rule=dp.Momentum(learn_rate=0.01, momentum=0.9), ) trainer.train(net, train_input, val_error) # Visualize convolutional filters to disk for l, layer in enumerate(net.layers): if not isinstance(layer, dp.Convolutional): continue W = np.array(layer.params()[0].array) filepath = os.path.join('mnist', 'conv_layer_%i.png' % l) dp.misc.img_save(dp.misc.conv_filter_tile(W), filepath) # Evaluate on test data error = net.error(test_input) print('Test error rate: %.4f' % error)
dp.FullyConnected( n_out=dataset.n_classes, weights=dp.Parameter(dp.AutoFiller(weight_gain_fc)), ), ], loss=dp.SoftmaxCrossEntropy(), ) # Train network n_epochs = [50, 15, 15] learn_rate = 0.05 momentum = 0.88 for i, epochs in enumerate(n_epochs): trainer = dp.StochasticGradientDescent( max_epochs=epochs, learn_rule=dp.Momentum(learn_rate=learn_rate / 10**i, momentum=momentum), ) trainer.train(net, train_input) # Plot misclassified images. def plot_img(img, title): plt.figure() plt.imshow(img, cmap='gray', interpolation='nearest') plt.title(title) plt.axis('off') plt.tight_layout() errors = net.predict(x_test) != y_test
n_out=10, weights=dp.Parameter(dp.AutoFiller()), ), ], loss=dp.loss.MeanSquaredError(), ) # Fine-tune neural network train_input = dp.SupervisedInput(brain_rep, cnn_rep, batch_size=batch_size) test_input = dp.Input(x_test) for i in range(len(epochs_value_pretraining)): lr = learning_rate_pretraining / 10**i trainer = dp.StochasticGradientDescent( max_epochs=epochs_value_pretraining[i], learn_rule=dp.Momentum(learn_rate=lr, momentum=momentum_value), ) trainer.train(net, train_input) net = dp.NeuralNetwork( layers=[ net.layers[0], ], loss=dp.SoftmaxCrossEntropy(), ) net2 = dp.NeuralNetwork( [ dp.FullyConnected( n_out=8, #neuronNum[-1], # n_out=dataset.n_classes,
n_out=300, weights=dp.Parameter(dp.AutoFiller()), activation='sigmoid', corruption=0.1, ), dp.DenoisingAutoencoder( n_out=100, weights=dp.Parameter(dp.AutoFiller()), activation='sigmoid', corruption=0.1, ), ], ) # Train autoencoders layer-wise trainer = dp.StochasticGradientDescent( max_epochs=15, learn_rule=dp.Momentum(learn_rate=0.05, momentum=0.9), ) for ae in sae.ae_models(): trainer.train(ae, train_input) # Train stacked autoencoders trainer.train(sae, train_input) # Setup neural network using the stacked autoencoder layers net = dp.NeuralNetwork( layers=sae.feedforward_layers() + [ dp.FullyConnected( n_out=8, # n_out=dataset.n_classes, weights=dp.Parameter(dp.AutoFiller()),
def run(): # Prepare data batch_size = 128 dataset = dp.datasets.CIFAR10() x, y = dataset.data() y = y.astype(dp.int_) train_idx, test_idx = dataset.split() x_train = preprocess_imgs(x[train_idx]) y_train = y[train_idx] x_test = preprocess_imgs(x[test_idx]) y_test = y[test_idx] train_input = dp.SupervisedInput(x_train, y_train, batch_size=batch_size) test_input = dp.SupervisedInput(x_test, y_test, batch_size=batch_size) # Setup neural network pool_kwargs = { 'win_shape': (3, 3), 'strides': (2, 2), 'border_mode': 'same', 'method': 'max', } nn = dp.NeuralNetwork(layers=[ dp.Convolutional( n_filters=32, filter_shape=(5, 5), border_mode='same', weights=dp.Parameter(dp.NormalFiller(sigma=0.0001), penalty=('l2', 0.004), monitor=True), ), dp.Activation('relu'), dp.Pool(**pool_kwargs), dp.Convolutional( n_filters=32, filter_shape=(5, 5), border_mode='same', weights=dp.Parameter(dp.NormalFiller(sigma=0.01), penalty=('l2', 0.004), monitor=True), ), dp.Activation('relu'), dp.Pool(**pool_kwargs), dp.Convolutional( n_filters=64, filter_shape=(5, 5), border_mode='same', weights=dp.Parameter(dp.NormalFiller(sigma=0.01), penalty=('l2', 0.004), monitor=True), ), dp.Activation('relu'), dp.Pool(**pool_kwargs), dp.Flatten(), dp.FullyConnected( n_output=64, weights=dp.Parameter(dp.NormalFiller(sigma=0.1), penalty=('l2', 0.03)), ), dp.Activation('relu'), dp.FullyConnected( n_output=dataset.n_classes, weights=dp.Parameter(dp.NormalFiller(sigma=0.1), penalty=('l2', 0.03)), ), dp.MultinomialLogReg(), ], ) # Train neural network n_epochs = [8, 8] learn_rate = 0.001 def valid_error(): return nn.error(test_input) for i, max_epochs in enumerate(n_epochs): lr = learn_rate / 10**i trainer = dp.StochasticGradientDescent( max_epochs=max_epochs, learn_rule=dp.Momentum(learn_rate=lr, momentum=0.9), ) trainer.train(nn, train_input, valid_error) # Visualize convolutional filters to disk for l, layer in enumerate(nn.layers): if not isinstance(layer, dp.Convolutional): continue W = np.array(layer.params()[0].values) dp.misc.img_save(dp.misc.conv_filter_tile(W), os.path.join('cifar10', 'convnet_layer_%i.png' % l)) # Evaluate on test data error = nn.error(test_input) print('Test error rate: %.4f' % error)
weights=dp.Parameter(dp.AutoFiller(gain=1.25)), ) ], loss=dp.SoftmaxCrossEntropy(), ) # Train network def test_error(): return np.mean(net.predict(test_input) != y_test) n_epochs = [8, 8] learn_rate = 0.05 for i, max_epochs in enumerate(n_epochs): lr = learn_rate/10**i trainer = dp.StochasticGradientDescent( max_epochs=max_epochs, learn_rule=dp.Momentum(learn_rate=lr, momentum=0.9), ) trainer.train(net, train_input, test_error) # Evaluate on test data print('Test error rate: %.4f' % test_error()) # Plot image examples. def plot_img(img, title): plt.figure() plt.imshow(img, interpolation='nearest') plt.title(title) plt.axis('off') plt.tight_layout()
def run(): # Prepare MNIST data dataset = dp.datasets.MNIST() x, y = dataset.data(flat=True) x = x.astype(dp.float_) y = y.astype(dp.int_) train_idx, test_idx = dataset.split() x_train = x[train_idx] y_train = y[train_idx] x_test = x[test_idx] y_test = y[test_idx] scaler = dp.UniformScaler(high=255.) x_train = scaler.fit_transform(x_train) x_test = scaler.transform(x_test) # Generate image pairs n_pairs = 100000 x1 = np.empty((n_pairs, 28 * 28), dtype=dp.float_) x2 = np.empty_like(x1, dtype=dp.float_) y = np.empty(n_pairs, dtype=dp.int_) n_imgs = x_train.shape[0] n = 0 while n < n_pairs: i = random.randint(0, n_imgs - 1) j = random.randint(0, n_imgs - 1) if i == j: continue x1[n, ...] = x_train[i] x2[n, ...] = x_train[j] if y_train[i] == y_train[j]: y[n] = 1 else: y[n] = 0 n += 1 # Input to network train_input = dp.SupervisedSiameseInput(x1, x2, y, batch_size=128) test_input = dp.SupervisedInput(x_test, y_test) # Setup network net = dp.SiameseNetwork( siamese_layers=[ dp.Dropout(), dp.FullyConnected( n_output=800, weights=dp.Parameter(dp.AutoFiller(), weight_decay=0.00001), ), dp.Activation('relu'), dp.FullyConnected( n_output=800, weights=dp.Parameter(dp.AutoFiller(), weight_decay=0.00001), ), dp.Activation('relu'), dp.FullyConnected( n_output=2, weights=dp.Parameter(dp.AutoFiller(), weight_decay=0.00001), ), ], loss_layer=dp.ContrastiveLoss(margin=0.5), ) # Train network trainer = dp.StochasticGradientDescent( max_epochs=10, learn_rule=dp.RMSProp(learn_rate=0.001), ) trainer.train(net, train_input) # Visualize feature space feat = net.features(test_input) colors = [ 'tomato', 'lawngreen', 'royalblue', 'gold', 'saddlebrown', 'violet', 'turquoise', 'mediumpurple', 'darkorange', 'darkgray' ] plt.figure() for i in range(10): plt.scatter(feat[y_test == i, 0], feat[y_test == i, 1], s=3, c=colors[i], linewidths=0) plt.legend([str(i) for i in range(10)], scatterpoints=1, markerscale=4) if not os.path.exists('mnist'): os.mkdirs('mnist') plt.savefig(os.path.join('mnist', 'siamese_dists.png'), dpi=200)
def run(): # Prepare data dataset = dp.datasets.MNIST() x, y = dataset.data() x = x[:, np.newaxis, :, :].astype(dp.float_) / 255.0 - 0.5 y = y.astype(dp.int_) train_idx, test_idx = dataset.split() x_train = x[train_idx] y_train = y[train_idx] x_test = x[test_idx] y_test = y[test_idx] train_input = dp.SupervisedInput(x_train, y_train, batch_size=128) test_input = dp.SupervisedInput(x_test, y_test) # Setup neural network nn = dp.NeuralNetwork(layers=[ dp.Convolutional( n_filters=20, filter_shape=(5, 5), weights=dp.Parameter(dp.NormalFiller(sigma=0.1), penalty=('l2', 0.00001)), ), dp.Activation('relu'), dp.Pool( win_shape=(2, 2), strides=(2, 2), method='max', ), dp.Convolutional( n_filters=50, filter_shape=(5, 5), weights=dp.Parameter(dp.NormalFiller(sigma=0.1), penalty=('l2', 0.00001)), ), dp.Activation('relu'), dp.Pool( win_shape=(2, 2), strides=(2, 2), method='max', ), dp.Flatten(), dp.FullyConnected( n_output=500, weights=dp.NormalFiller(sigma=0.01), ), dp.FullyConnected( n_output=dataset.n_classes, weights=dp.NormalFiller(sigma=0.01), ), dp.MultinomialLogReg(), ], ) # Train neural network def valid_error(): return nn.error(test_input) trainer = dp.StochasticGradientDescent( max_epochs=15, learn_rule=dp.Momentum(learn_rate=0.1, momentum=0.9), ) trainer.train(nn, train_input, valid_error) # Visualize convolutional filters to disk for layer_idx, layer in enumerate(nn.layers): if not isinstance(layer, dp.Convolutional): continue W = np.array(layer.params()[0].values) dp.misc.img_save( dp.misc.conv_filter_tile(W), os.path.join('mnist', 'convnet_layer_%i.png' % layer_idx)) # Evaluate on test data error = nn.error(test_input) print('Test error rate: %.4f' % error)
dp.FullyConnected( n_out=1024, weights=dp.Parameter(dp.AutoFiller(w_gain), weight_decay=w_decay), ), dp.ReLU(), dp.FullyConnected( n_out=2, weights=dp.Parameter(dp.AutoFiller(w_gain)), ), ], loss=dp.ContrastiveLoss(margin=1.0), ) # Train network trainer = dp.StochasticGradientDescent( max_epochs=15, learn_rule=dp.RMSProp(learn_rate=0.01), ) trainer.train(net, train_input) # Plot 2D embedding test_input = dp.Input(x_test) x_test = np.reshape(x_test, (-1, ) + dataset.img_shape) feat = net.features(test_input) feat -= np.min(feat, 0) feat /= np.max(feat, 0) plt.figure() ax = plt.subplot(111) shown_images = np.array([[1., 1.]]) for i in range(feat.shape[0]): dist = np.sum((feat[i] - shown_images)**2, 1)
def test_classification(): # Make dataset n_classes = 2 n_samples = 1000 n_features = 48 x, y = make_classification( n_samples=n_samples, n_features=n_features, n_classes=n_classes, n_informative=n_classes*2, random_state=1 ) n_train = int(0.8 * n_samples) n_val = int(0.5 * (n_samples - n_train)) x_train = x[:n_train] y_train = y[:n_train] x_val = x[n_train:n_train+n_val] y_val = y[n_train:n_train+n_val] x_test = x[n_train+n_val:] y_test = y[n_train+n_val:] scaler = dp.StandardScaler() x_train = scaler.fit_transform(x_train) x_val = scaler.transform(x_val) x_test = scaler.transform(x_test) # Setup input batch_size = 16 train_input = dp.SupervisedInput(x_train, y_train, batch_size=batch_size) val_input = dp.Input(x_val) test_input = dp.Input(x_test) # Setup neural network weight_decay = 1e-03 net = dp.NeuralNetwork( layers=[ dp.FullyConnected( n_out=32, weights=dp.Parameter(dp.AutoFiller(), weight_decay=weight_decay), ), dp.Activation('relu'), dp.FullyConnected( n_out=64, weights=dp.Parameter(dp.AutoFiller(), weight_decay=weight_decay), ), dp.Activation('relu'), dp.FullyConnected( n_out=n_classes, weights=dp.Parameter(dp.AutoFiller()), ), ], loss=dp.SoftmaxCrossEntropy(), ) # Train neural network def val_error(): return np.mean(net.predict(val_input) != y_val) trainer = dp.StochasticGradientDescent( min_epochs=10, learn_rule=dp.Momentum(learn_rate=0.01, momentum=0.9), ) trainer.train(net, train_input, val_error) # Evaluate on test data error = np.mean(net.predict(test_input) != y_test) print('Test error rate: %.4f' % error) assert error < 0.2