def train_comparison(args, theta, dataset): hyper_params = {k: args[k] for k in ['b_size']} hyper_params['to_fix'] = [ ] # a selection of parameters can be fixed, e.g. the word embeddings # initialize optimizer with learning rate (other hyperparams: default values) opt = args['optimizer'] if opt == 'adagrad': optimizer = Optimizer.Adagrad(theta, lr=args['learningrate'], lambda_l2=args['lambda']) elif opt == 'adam': optimizer = Optimizer.Adam(theta, lr=args['learningrate'], lambda_l2=args['lambda']) elif opt == 'sgd': optimizer = Optimizer.SGD(theta, lr=args['learningrate'], lambda_l2=args['lambda']) else: raise RuntimeError("No valid optimizer chosen") # train model evals = plain_train(optimizer, dataset, hyper_params, n_epochs=args['n_epochs'], outdir=args['out_dir']) # store learned model store_theta( theta, os.path.join(args['out_dir'], 'comparisonFinalModel.theta.pik')) # run final evaluation for name, tb in dataset.iteritems(): print('Evaluation on ' + name + ' data (' + str(len(tb.examples)) + ' examples)') tb.evaluate(optimizer.theta, verbose=1) # create convergence plot for name, eval in evals.items(): toplot = [e[key] for e in eval for key in e if 'loss' in key] plt.plot(xrange(len(toplot)), toplot, label=name) plt.legend() plt.title([key for key in eval[0].keys() if 'loss' in key][0]) plt.savefig(os.path.join(args['out_dir'], 'comparisonConvergence.png'))
m = 2000 case = "quadratic" nclass = 3 X, Y = example_classification.example(nfeature, m, case, nclass) # (2) Define model model = NeuralNetwork.NeuralNetwork(nfeature) model.add_layer(11, "tanh") model.add_layer(9, "tanh") model.add_layer(6, "tanh") model.add_layer(3, "tanh") model.add_layer(nclass, "softmax") # (3) Compile model #optimizer = Optimizer.GradientDescent(0.3) #optimizer = Optimizer.Momentum(0.3,0.9) #optimizer = Optimizer.RmsProp(0.02,0.9,1e-8) #optimizer = Optimizer.Adam(0.02,0.9,0.999,1e-8) optimizer = Optimizer.Adagrad(0.1, 1e-8) model.compile("crossentropy", optimizer) # (4) Train model epochs = 100 time_start = time.time() history = model.fit(X, Y, epochs, batch_size=1000) time_end = time.time() print("Train time: {}".format(time_end - time_start)) # (5) Results # plot loss and accuracy plot_results.plot_results_history(history, ["loss"]) plot_results.plot_results_history(history, ["accuracy"]) # plot heatmap in x0-x1 plane plot_results.plot_results_classification((X, Y), model, nclass) plt.show()