nargs=2) parser.add_argument('-DS', '--dataset', help='Path to the dataset csv file', required=True) parser.add_argument('-P', '--params', help='Path to hyperparameters json file', required=True) args = parser.parse_args() logger = Logger() logger.log('Starting q2_analyze.py...') logger.log('Loading \"' + args.data[0] + '\" and \"' + args.data[1] + '\"') hist1 = read_json_to_dict(args.data[0]) hist2 = read_json_to_dict(args.data[1]) # Hyperparameters hyperparameters = read_json_to_dict(args.params) # Setup data to be used df = pd.DataFrame( hist2['Q2']).applymap(lambda x: training_result(x, mode='loss')) columns = hist2['columns'] def decode_col_name(col): idx = list(map(int, col.split(","))) removed_col = [columns[i] for i in idx] remaining_cols = list(set(columns) - set(removed_col))
logger.log('Starting q3_train.py...') # Loading dataset logger.log('Loading dataset from \"' + args.data + '\"...') df = pd.read_csv(args.data) dataset = PreprocessDataset(df=df, feature_columns=df.columns[1:8], label_column=df.columns[-1], test_ratio=0.3, fold=5) X_train, y_train = dataset.get_train() X_test, y_test = dataset.get_test() # Defining hyperparameters try: hyperparameters = read_json_to_dict(args.params) except: hyperparameters = { "input_shape": (7, ), "removed": [], "batch_size": 8, "num_neurons": 10, "alpha": 1e-3, "beta": 1e-3 } write_dict_to_json(hyperparameters, args.params) epochs = 10000 num_neurons = 50 dropout = 0.2 batch_size = hyperparameters['batch_size']
import argparse import pandas as pd import matplotlib.pyplot as plt from utils.logger import Logger from utils.dict_json import read_json_to_dict from utils.acc_loss import acc_converge_epoch, loss_converge_epoch, training_result parser = argparse.ArgumentParser() parser.add_argument('-D', '--data', help='Path to result json file', required=True) args = parser.parse_args() logger = Logger() logger.log('Starting q2_analyze.py...') logger.log('Loading \"' + args.data + '\"') histories = read_json_to_dict(args.data) batch_epoch = pd.DataFrame(histories['Q2']['cv']['accuracy']) time_per_epoch = pd.DataFrame(histories['Q2']['cv']['time']) epoch_to_converge = batch_epoch.applymap(lambda x: acc_converge_epoch(x)) cv_accuracy = batch_epoch.applymap(lambda x: training_result(x)) total_time_to_converge = (epoch_to_converge * time_per_epoch).mean() print(epoch_to_converge) epoch_to_converge = epoch_to_converge.mean() print(cv_accuracy) cv_accuracy = cv_accuracy.mean() batch_size = histories['Q2']['optimal']['optimal_batch'] def q2a1(): logger.log('Analyzing Q2(a1)...')
import argparse import pandas as pd import matplotlib.pyplot as plt from utils.logger import Logger from utils.dict_json import read_json_to_dict from utils.acc_loss import acc_converge_epoch, loss_converge_epoch, training_result parser = argparse.ArgumentParser() parser.add_argument('-D', '--data', nargs=2, help='Path to the result json files for Q4 and Q5', required=True) args = parser.parse_args() logger = Logger() logger.log('Starting q5_analyze.py...') logger.log('Loading \"' + args.data[0] + '\" and \"' + args.data[1] + '\"') hist1 = read_json_to_dict(args.data[0]) hist2 = read_json_to_dict(args.data[1]) if hist1['seed'] == hist2['seed']: hist1.update(hist2) histories = hist1 else: raise Exception('Results for Q4 and Q5 have different seed values') def q5a(): logger.log('Analyzing Q5(a)...') training_accuracy = histories['Q5']['accuracy'][1:] testing_accuracy = histories['Q5']['val_accuracy'][1:] f, ax = plt.subplots(figsize=(12, 6)) plt.plot(training_accuracy, label='training') plt.plot(testing_accuracy, label='testing')