def get_accuracy(structure):
    structure = [25] + list(structure) + [10]
    instances_by_label = util.read_training("train.csv")
    for label in instances_by_label:
        for instance in instances_by_label[label]:
            instance /= max(instance.max(), -instance.min())
    
    np.random.seed(0)
    test_instances = []
    test_labels = []
    for label in instances_by_label:
        np.random.shuffle(instances_by_label[label])
        test_instances.extend(instances_by_label[label][:1000])
        test_labels.extend([label]*1000)
        instances_by_label[label] = instances_by_label[label][1000:]

    max_accuracy, paras = train_nn(structure, instances_by_label, test_instances, test_labels)
    return max_accuracy[1]
        np.random.shuffle(instances_by_label[label])
        test_instances.extend(instances_by_label[label][:1000])
        test_labels.extend([label]*1000)
        instances_by_label[label] = instances_by_label[label][1000:]

    max_accuracy, paras = train_nn(structure, instances_by_label, test_instances, test_labels)
    return max_accuracy[1]

# definitons of vector-version tanh and exp
vec_tanh = np.vectorize(math.tanh)
vec_exp  = np.vectorize(math.exp)

if __name__ == "__main__":
    structure = [25, 100, 10]

    instances_by_label = util.read_training("train.csv")

    # normalize so that tha absolute value in an input doesn't exceed 1
    for label in instances_by_label:
        for instance in instances_by_label[label]:
            instance /= max(instance.max(), -instance.min())
    
    np.random.seed(0)
    test_instances = []
    test_labels = []
    for label in instances_by_label:
        np.random.shuffle(instances_by_label[label])
        test_instances.extend(instances_by_label[label][:1000])
        test_labels.extend([label]*1000)
        instances_by_label[label] = instances_by_label[label][1000:]