Spaces:
Runtime error
Runtime error
| import time | |
| import numpy as np | |
| import LearnTriangles | |
| import Settings as settings | |
| from SymbolicFunctionLearner import SFL | |
| num_triangles = 1000 | |
| num_fake = 3000 | |
| max_domain = 5 | |
| num_trials = 500 | |
| num_smp_features = 2 | |
| settings.show_output = True | |
| settings.keep_logs = True | |
| settings.mode = "lr" | |
| # settings.initialize_ops = ["mul", "mul", "mul", "mul", "id", "id", "id"] | |
| # settings.initialize_ops = ["mul", "mul", "id"] | |
| """" These are the things to change""" | |
| var_names = LearnTriangles.get_xy_var_names() | |
| # real_data = LearnTriangles.get_right_triangle_data(num_triangles, max_domain) | |
| # real_data = LearnTriangles.get_angle_data(num_triangles) | |
| real_data = LearnTriangles.get_xy_data(num_triangles, max_domain) | |
| real_y = [1 for v in real_data] | |
| fake_data = LearnTriangles.get_fake_xy_data(num_triangles, max_domain) | |
| # fake_data = LearnTriangles.get_fake_angles(num_triangles) | |
| # fake_data = LearnTriangles.get_triangle_data(num_triangles, max_domain) | |
| fake_y = [0 for _ in fake_data] | |
| # real_test_data = LearnTriangles.get_right_triangle_data(num_triangles, max_domain * 2) | |
| # real_test_data = LearnTriangles.get_angle_data(num_triangles) | |
| real_test_data = LearnTriangles.get_xy_data(num_triangles, max_domain) | |
| real_test_y = [1 for v in real_test_data] | |
| # fake_test_data = LearnTriangles.get_triangle_data(num_triangles, max_domain * 2) | |
| # fake_test_data = LearnTriangles.get_fake_angles(num_triangles) | |
| fake_test_data = LearnTriangles.get_fake_xy_data(num_triangles, max_domain) | |
| fake_test_y = [0 for _ in fake_test_data] | |
| """ Don't change after this """ | |
| print("real data: ") | |
| for r_d in real_data[:5]: | |
| print(r_d) | |
| print("real y:") | |
| for r_d in real_y[:5]: | |
| print(r_d) | |
| print("fake data:") | |
| for r_d in fake_data[:5]: | |
| print(r_d) | |
| print("fake y:") | |
| for r_d in fake_y[:5]: | |
| print(r_d) | |
| full_data = real_data.copy() | |
| full_data.extend(fake_data) | |
| full_labels = real_y.copy() | |
| full_labels.extend(fake_y) | |
| full_test_data = real_test_data.copy() | |
| full_test_data.extend(fake_test_data) | |
| full_test_labels = real_test_y.copy() | |
| full_test_labels.extend(fake_test_y) | |
| # print("full data:\n{}".format(full_data)) | |
| # print("full y:\n{}".format(full_labels)) | |
| # | |
| # for datum in real_data: | |
| # print(datum[0]*datum[4] - datum[1]*datum[3]) | |
| our_results = [] | |
| settings.true_eqn = "0*x1" | |
| settings.num_features = num_smp_features | |
| model = SFL() | |
| for trial_round in range(num_trials): | |
| sampled_features = np.random.choice(range(len(real_data[0])), num_smp_features, replace=True) | |
| sampled_features = [0, 1] | |
| data = [[row[smp_i] for smp_i in sampled_features] for row in full_data] | |
| test_data = [[row[smp_i] for smp_i in sampled_features] for row in full_test_data] | |
| smp_var_names = [var_names[smp_i] for smp_i in sampled_features] | |
| print("Trial round {} of {}.".format(trial_round + 1, num_trials)) | |
| print(" Using variables {}.".format(smp_var_names)) | |
| settings.fixed_x = [] | |
| settings.fixed_y = [] | |
| for line in data: | |
| settings.fixed_x.append(line) | |
| settings.fixed_y = full_labels | |
| # print("fixed_x: {}, {}".format(len(settings.fixed_x), len(settings.fixed_x[0]))) | |
| # print("fixed_y: {}".format(len(settings.fixed_y))) | |
| model.reset(var_names=smp_var_names) | |
| # train_X = DataUtils.generate_data(settings.train_N, n_vars=model.n_input_variables, | |
| # avoid_zero=settings.avoid_zero) | |
| # valid_X = DataUtils.generate_data(settings.train_N, n_vars=model.n_input_variables, | |
| # avoid_zero=settings.avoid_zero) | |
| # test_X = DataUtils.generate_data(settings.test_N, n_vars=model.n_input_variables, | |
| # min_x=settings.test_scope[0], | |
| # max_x=settings.test_scope[1]) | |
| train_X = np.array(data) | |
| train_Y = full_labels | |
| test_X = np.array(test_data) | |
| test_Y = full_test_labels | |
| train_X = train_X.reshape([-1, settings.num_dims_per_feature, settings.num_features]) | |
| test_X = test_X.reshape([-1, settings.num_dims_per_feature, settings.num_features]) | |
| start_time = time.time() | |
| best_model, best_iter, best_err = model.repeat_train(train_X, train_Y, | |
| settings.num_train_repeat_processes, | |
| test_x=test_X, test_y=test_Y) | |
| running_time = time.time() - start_time | |
| print("best_model: {}".format(best_model)) | |
| print("----------------------") | |
| print("Finished this experiment. Took {:.2f} minutes.\n".format(running_time / 60)) | |
| our_results.append([best_err, best_model, smp_var_names]) | |
| our_results = sorted(our_results, key=lambda entry: entry[0]) | |
| output_file = open("images/triangle_output.txt", "w") | |
| for entry in our_results: | |
| output_file.write("{}\n{}\n{}\n\n".format(entry[0], entry[2], entry[1])) | |
| output_file.close() | |
| print("Final solution found at attempt {}:".format(best_iter)) | |
| print("y = {}".format(best_model)) | |
| print("Test error: {}".format(best_err)) | |
| if best_err < 0.02: | |
| print("Attained error less than 0.02 - great!") | |
| print() | |