Ejemplo n.º 1
0
def test_cnn(dataset: str):
    if dataset == 'mnist':
        mnist = fetch_mldata("MNIST original")
        X = mnist.data / 255
        y = np.reshape(mnist.target, (mnist.target.shape[0]))
        X = X.reshape((X.shape[0], 28, 28, 1))
        X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25)
        #X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=512)
        batch_size = 512
        epochs = 10

        optimizer = AdamOptimizer(learning_rate=.005)

        nn = NeuralStack()
        nn.add(Convolutional2D([5, 5, 1], 32, strides=(2, 2)))
        nn.add(Activation('relu'))
        nn.add(Convolutional2D([5, 5, 32], 32, strides=(2, 2)))
        nn.add(Activation('relu'))
        nn.add(Flatten())
        nn.add(FullyConnected(512, 64))
        nn.add(Activation('sigmoid'))
        nn.add(FullyConnected(64, 10))
        nn.add(Activation('softmax'))

    elif dataset == 'digits':
        digits = load_digits()
        X = digits.images
        y = digits.target
        X = X.reshape((X.shape[0], 8, 8, 1))
        X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25)

        optimizer = AdamOptimizer(learning_rate=.001)

        nn = NeuralStack()
        nn.add(Convolutional2D([4, 4, 1], 32, strides=(2, 2)))
        nn.add(Activation('relu'))
        #nn.add(Convolutional2D([3, 3, 32], 32, strides=(1, 1)))
        #nn.add(Activation('relu'))
        #nn.add(Convolutional2D([2, 2, 32], 64, strides=(1, 1)))
        #nn.add(Activation('relu'))
        nn.add(Flatten())
        nn.add(FullyConnected(288, 200))
        nn.add(Activation('relu'))
        nn.add(FullyConnected(200, 10))
        nn.add(Activation('softmax'))

        batch_size = 1024
        epochs = 50

    nn.add(optimizer)
    nn.add(CrossEntropy())
    nn.add(SGDBatching(batch_size))

    errors = nn.train(X_train, y_train,
             epochs=epochs, print_every=1*batch_size, validation_fraction=0.01, alpha_reg=.005)
    accuracy_test = nn.get_accuracy(X_test, y_test, batch_size=1024)
    log('Accuracy on test: {:.3f}%'.format(accuracy_test))

    plt.plot(errors)
    plt.show()
Ejemplo n.º 2
0
def test_cnn_digits():
    images, labels = load_digits(return_X_y=True)
    images = images.reshape((-1, 8, 8))
    X_train, X_test, y_train, y_test = train_test_split(images,
                                                        labels,
                                                        train_size=.9,
                                                        test_size=.1)
    nn = NeuralStack()
    nn.add(Convolutional2D((4, 4, 1), 16))
    nn.add(Activation('relu'))
    nn.add(MaxPooling2D((2, 2)))
    nn.add(Flatten())
    nn.add(FullyConnected(256, 64))
    nn.add(Activation('sigmoid'))
    nn.add(FullyConnected(64, 10))
    nn.add(Activation('softmax'))
    nn.add(SGDBatching(len(X_train)))
    nn.add(CrossEntropy())
    nn.add(AdamOptimizer(learning_rate=5e-3))
    nn.train(X_train,
             y_train,
             print_every=5,
             epochs=150,
             l2_alpha=.05,
             validation_fraction=0)
    print('Trained')
    assert ClassificationCost.accuracy(y_test, nn.eval(X_test)) >= .9
Ejemplo n.º 3
0
def train_mlp(use_lbfgs=True):
    mnist = fetch_mldata("MNIST original")
    X = (mnist.data / 255 - .5) * 2
    y = np.reshape(mnist.target, (mnist.target.shape[0], 1))
    X = X.reshape((X.shape[0], 28, 28, 1))  # New shape: (None, 28, 28, 1)
    X_train, X_test, y_train, y_test = train_test_split(X,
                                                        y,
                                                        test_size=1. / 7.)

    nn = NeuralStack()
    n_hidden = 500

    if use_lbfgs:
        nn.add(Flatten())
        nn.add(FullyConnected(28 * 28, n_hidden))
        nn.add(Activation(function='sigmoid'))
        nn.add(FullyConnected(n_hidden, 10))
        nn.add(Activation(function='softmax'))

        nn.add(CrossEntropy())
        nn.add(SGDBatching(256))
        adam = AdamOptimizer(learning_rate=0.007)
        nn.add(LBFGS(m=30, first_order_optimizer=adam))
    else:
        nn.add(Flatten())
        nn.add(FullyConnected(28 * 28, n_hidden))
        nn.add(Activation(function='sigmoid'))
        nn.add(FullyConnected(n_hidden, 10))
        nn.add(Activation(function='softmax'))

        nn.add(CrossEntropy())
        nn.add(SGDBatching(512))
        nn.add(AdamOptimizer(learning_rate=0.007))

    t0 = time()
    nn.train(X_train, y_train, alpha_reg=0.0001, epochs=6, print_every=100)
    train_acc = accuracy_score(np.squeeze(y_train),
                               nn.eval(X_train).argmax(axis=1))
    test_acc = accuracy_score(np.squeeze(y_test),
                              nn.eval(X_test).argmax(axis=1))
    print("Training accuracy: %f" % train_acc)
    print("Test accuracy: %f" % test_acc)
    print("Optimization time: %.2f" % (time() - t0))
def get_trained_autoencoder():
    try:
        with open('autoencoder.pickle', 'rb') as f:
            return pickle.load(f)
    except FileNotFoundError:
        nn = create_autoencoder()
        nn.add(SGDBatching(2048))
        nn.train(X_train, X_train, l2_alpha=.1, epochs=50, print_every=5)
        nn.batch_op = None
        with open('autoencoder.pickle', 'wb') as f:
            pickle.dump(nn, f)
        return nn
Ejemplo n.º 5
0
def test_mlp_on_xor_problem():
    nn = NeuralStack()
    nn.add(FullyConnected(2, 8))
    nn.add(Activation(function='tanh'))
    nn.add(FullyConnected(8, 1))
    nn.add(Activation(function='sigmoid'))
    nn.add(MSE())
    nn.add(MomentumOptimizer(learning_rate=0.5, momentum=0))
    nn.add(SGDBatching(4))
    X = [[0, 0], [0, 1], [1, 0], [1, 1]]
    y = [0, 1, 1, 0]
    nn.train(X, y, alpha_reg=0, epochs=1000, print_every=800)
    predictions = np.squeeze(nn.eval(X))
    assert np.array_equal(predictions > 0.5, y)
Ejemplo n.º 6
0
def test_mlp_digits():
    images, labels = load_digits(return_X_y=True)
    X_train, X_test, y_train, y_test = train_test_split(images,
                                                        labels,
                                                        train_size=.9,
                                                        test_size=.1)
    nn = NeuralStack()
    nn.add(FullyConnected(64, 32))
    nn.add(Activation('relu'))
    nn.add(FullyConnected(32, 10))
    nn.add(Activation('softmax'))
    nn.add(SGDBatching(len(X_train)))
    nn.add(CrossEntropy())
    nn.add(AdamOptimizer(learning_rate=5e-3))
    nn.train(X_train, y_train, print_every=1, epochs=100, l2_alpha=.05)
    assert ClassificationCost.accuracy(y_test, nn.eval(X_test)) >= .9