Exemple #1
0
def learn(argv):
    fname = argv[1]
    if len(argv) == 3:
        hidden_layers_list = eval(argv[2])
    else:
        hidden_layers_list = [10]

    matFileContent = scipy.io.loadmat(fname) # corresponding MAT file
    x_train = np.array(matFileContent['TrainSet'].tolist())
    t_train = np.array(matFileContent['TrainClass'].tolist())

    x_valid = np.array(matFileContent['ValidSet'].tolist())
    t_valid = np.array(matFileContent['ValidClass'].tolist())

    d = x_train.shape[1]

    mlp = Mlp(hidden_layers_list, d)
    stopping_criterion = Mlp.EarlyStoppingCriterion(5, 1e-5)
    #stopping_criterion = Mlp.BasicStoppingCriterion(0.001, 100)

    (error_data, best_epoch) = mlp.train_network(x_train, t_train, 
            x_valid, t_valid, stopping_criterion)

    lrate = defaults.LEARNING_RATE_DEFAULT
    mterm = defaults.MOMENTUM_TERM_DEFAULT 
    terms = str(lrate)[2:]+"_"+str(mterm)[2:]
    arch_desc = reduce(lambda x, y:str(x)+"_"+str(y), 
            hidden_layers_list, "")
    plt_file = 'plots/errors_' + terms + arch_desc + '.png'
    plot_network_errors(error_data, best_epoch, plt_file)

    print "Train log error and accuracy:"
    print mlp.get_input_error(x_train, t_train), \
            mlp.get_accuracy(x_train, t_train), "%"
    print "Valid log error and accuracy:"
    print mlp.get_input_error(x_valid, t_valid), \
            mlp.get_accuracy(x_valid, t_valid), "%"

    x_test = np.array(matFileContent['TestSet'].tolist())
    t_test = np.array(matFileContent['TestClass'].tolist())
    print "Test log error and accuracy:"
    print mlp.get_input_error(x_test, t_test), \
            mlp.get_accuracy(x_test, t_test), "%"

    pickle.dump(mlp, open('trained_network.dat', 'wb'))
shuffle_2d(train_datapoints, train_classes)
shuffle_2d(valid_datapoints, valid_classes)
train_datapoints = train_datapoints[:dtp]
train_classes = train_classes[:dtp]
valid_datapoints = valid_datapoints[:validp]
valid_classes = valid_classes[:validp]

# Use the part of them to train the network
architecture = [30]
mlp = mlp.Mlp(hidden_layers_list = architecture, d = len(train_datapoints[0]))

#stop_crit = mlp.BasicStoppingCriterion(1e-3, 100)
stop_crit = mlp.EarlyStoppingCriterion()
res, best_epoch = mlp.train_network(train_datapoints, train_classes, valid_datapoints, valid_classes, stop_crit)
print res
plotters.plot_network_errors(res, best_epoch, 'error.png')

test_classes = test_classes.flatten()
print test_classes

classified_correctly = 0
total_len = len(test_datapoints)
print "Test set"
for i in xrange(len(test_datapoints)):
    dp = test_datapoints[i]
    cl = test_classes[i]
    out_cl = mlp.classify(dp)
    if cl == out_cl:
        classified_correctly += 1

print classified_correctly, total_len, 100.0*classified_correctly/total_len