示例#1
0
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()