Ejemplo n.º 1
0
def main_okapi():
    from OkapiV2.Core import Model, Branch
    from OkapiV2.Layers.Basic import FullyConnected, Dropout
    from OkapiV2.Layers.Activations import ActivationLayer, PReLULayer
    from OkapiV2.Layers.Convolutional import Convolutional, MaxPooling
    from OkapiV2 import Activations, Datasets
    from OkapiV2 import Optimizers
    X_train, y_train, X_val, y_val, X_test, y_test = Datasets.load_mnist()

    tree = Branch()
    tree.add_layer(Convolutional(num_filters, filter_size, filter_size, pad=pad))
    # tree.add_layer(BatchNorm())
    tree.add_layer(PReLULayer())
    tree.add_layer(MaxPooling(pool_size, pool_size))

    tree.add_layer(Convolutional(num_filters, filter_size, filter_size, pad=pad))
    # tree.add_layer(BatchNorm())
    tree.add_layer(PReLULayer())
    tree.add_layer(MaxPooling(pool_size, pool_size))

    tree.add_layer(Convolutional(num_filters, filter_size, filter_size, pad=pad))
    # tree.add_layer(BatchNorm())
    tree.add_layer(PReLULayer())
    tree.add_layer(MaxPooling(pool_size, pool_size))

    '''tree.add_layer(Convolutional(num_filters, filter_size, filter_size, pad=pad))
    # tree.add_layer(BatchNorm())
    tree.add_layer(PReLULayer())
    tree.add_layer(MaxPooling(pool_size, pool_size))'''

    '''tree.add_layer(Dropout(0.25))
    tree.add_layer(FullyConnected((h_size, 1, 1, 1)))
    tree.add_layer(PReLULayer())
    # tree.add_layer(BatchNorm())'''

    tree.add_layer(Dropout(0.5))
    tree.add_layer(FullyConnected())
    tree.add_layer(ActivationLayer(Activations.alt_softmax))

    tree.add_input(X_train)

    model = Model()
    model.set_tree(tree)
    model.set_optimizer(Optimizers.RMSprop(learning_rate=learning_rate,
                                           momentum=momentum))
    model.train([X_train], y_train, num_epochs=num_epochs,
                batch_size=batch_size)
    # ok.save_model(model, 'okapi_mnist.pk')

    okapi_accuracy = model.get_accuracy([X_test], y_test)
    print("Test Accuracy: {}%"
          .format(round(okapi_accuracy, 2)))
    return okapi_accuracy
from OkapiV2.Core import Model, Branch
from OkapiV2.Layers.Basic import FullyConnected
from OkapiV2.Layers.Activations import ActivationLayer, PReLULayer
from OkapiV2 import Activations, Datasets, Optimizers

x_train, y_train, x_val, y_val, x_test, y_test = Datasets.load_mnist()

tree = Branch()
tree.add_layer(FullyConnected((512, 1, 1, 1)))
tree.add_layer(PReLULayer())
tree.add_layer(FullyConnected((512, 1, 1, 1)))
tree.add_layer(PReLULayer())
tree.add_layer(FullyConnected((512, 1, 1, 1)))
tree.add_layer(PReLULayer())
tree.add_layer(FullyConnected())
tree.add_layer(ActivationLayer(Activations.softmax))
tree.add_input(x_train)

model = Model()
model.set_tree(tree)
model.set_optimizer(Optimizers.RMSprop(learning_rate=0.00005))

index = 60000
model.train([x_train[:index, :, :, :]], y_train[:index, :], 24)
accuracy = model.get_accuracy([x_train[:index, :, :, :]], y_train[:index])
print("Accuracy: {}%".format(accuracy))
test_accuracy = model.get_accuracy([x_test], y_test)
print("Test accuracy: {}%".format(test_accuracy))