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