예제 #1
0
def main(args):
    # Import data
    mnist = input_data.read_data_sets(args.data_dir, one_hot=True)
    relu = ReLU()

    model = Model(layers=[
        Conv2D(filter_size=(10, 10),
               input_shape=(28, 28, 1),
               stride=(1, 1),
               channels=32,
               activation=relu,
               padding='same',
               filter_initializer=weight_initializer,
               bias_initializer=bias_initializer),
        MaxPool2D(pool_size=(2, 2)),
        Conv2D(filter_size=(5, 5),
               stride=(1, 1),
               channels=16,
               activation=relu,
               padding='same',
               filter_initializer=weight_initializer,
               bias_initializer=bias_initializer),
        MaxPool2D(pool_size=(2, 2)),
        Flatten(),
        Dense(1024,
              weight_initializer=weight_initializer,
              bias_initializer=bias_initializer,
              activation=relu),
        Dense(10,
              weight_initializer=weight_initializer,
              bias_initializer=bias_initializer)
    ],
                  optimizer=AdaGrad(learning_rate=0.001, epsilon=1e-8),
                  loss=SoftMaxCrossEntropyWithLogits())

    # Train
    for _ in range(200):
        batch_xs, batch_ys = mnist.train.next_batch(100)
        batch_xs = np.reshape(batch_xs, [-1, 28, 28, 1])
        model.fit_batch(batch_xs, batch_ys)
        if args.verbose:
            print('Batch {} loss: {}'.format(
                model.batch_number,
                model.loss.compute(model.predict(batch_xs), batch_ys)))

    # Test trained model
    actual_labels = np.argmax(mnist.test.labels, 1)
    predictions = model.predict(np.reshape(mnist.test.images, [-1, 28, 28, 1]))
    predicted_labels = np.argmax(predictions, 1)

    accuracy = (actual_labels == predicted_labels).mean()
    print("Test accuracy: {}".format(accuracy))
예제 #2
0
def main(args):
    # Import data
    mnist = input_data.read_data_sets(args.data_dir, one_hot=True)

    model = Model(layers=[
        Dense(10,
              weight_initializer=weight_initializer,
              bias_initializer=bias_initializer,
              input_shape=(784, ))
    ],
                  optimizer=GradientDescent(learning_rate=0.5),
                  loss=SoftMaxCrossEntropyWithLogits())

    # Train
    for _ in range(1000):
        batch_xs, batch_ys = mnist.train.next_batch(100)
        model.fit_batch(batch_xs, batch_ys)

    # Test trained model
    actual_labels = np.argmax(mnist.test.labels, 1)
    predictions = model.predict(mnist.test.images)
    predicted_labels = np.argmax(predictions, 1)

    accuracy = (actual_labels == predicted_labels).mean()
    print("Test accuracy: {}".format(accuracy))
예제 #3
0
    dense3 = Dense((batch_size, 100), 10)

    loss_f = CrossEntropy()
    optimizer = Adam()

    # Initializing model
    model = Model(input_shape=(batch_size, dataset.x_train.shape[1]),
                  layers=[dense1, relu1, dense2, relu2, drop1, dense3],
                  loss_f=loss_f,
                  optimizer=optimizer)

    # Create hyper-param schedulers
    lr_schedule = HyperParamScheduler(3e-4, 3e-3, True)
    mom_schedule = HyperParamScheduler(0.8, 0.9, False)

    # Train
    model.fit_one_cycle(dataset.x_train, dataset.y_train, 50, lr_schedule,
                        mom_schedule, batch_size,
                        [dataset.x_val, dataset.y_val])

    # Save model
    save_path = pathlib.Path.home() / "Desktop" / "MNIST_model"
    model.save_model_weights(save_path)

    # Load model and test
    model.load_model_weights(save_path)
    pred = np.argmax(model.predict(dataset.x_test[0]))
    act = np.argmax(dataset.y_test[0])

    print(f"\nPrediction: {pred}, Actual: {act}")
예제 #4
0
split = int(0.8 * all_data.shape[0])
x_train = all_data[:split, 1:]
x_test = all_data[split:, 1:]
y_train = all_data[:split, 0]
y_test = all_data[split:, 0]

y_train = one_hot(y_train.astype('int'))
y_test = one_hot(y_test.astype('int'))

def accuracy(y, y_hat):
    y = np.argmax(y, axis=1)
    y_hat = np.argmax(y_hat, axis=1)

    return np.mean(y==y_hat)

def relu(x):
    return np.maximum(x, 0)

model = Model()
model.add_layer(Layer(784, 10, softmax))
#model.add_layer(Layer(64, 64, relu))
#model.add_layer(Layer(64, 10, softmax))

model.compile(CrossEntropyLoss, DataLoader, accuracy,
              batches_per_epoch=x_train.shape[0] // 32 + 1,
              n_workers=50, c1=1., c2=2.)
model.fit(x_train, y_train, 100)
y_hat = model.predict(x_test)

print('Accuracy on test:', accuracy(y_test, y_hat))