def construct_transforms(dataset_args, transforms_args): transforms_dict = { "merge_two_signals": TransformSignal(merge_two_signals, transforms_args), "identity": TransformSignal(identity, transforms_args), "identity_ml": TransformSignal(identity_ml, transforms_args), "delay_signal": TransformSignal(delay_signal, transforms_args), "add_noise_to_signal": TransformSignal(add_noise_to_signal, transforms_args), "add_noise_to_signal_only_one_signal": TransformSignal(add_noise_to_signal_only_one_signal, transforms_args), "add_noise_to_signal_with_proba": TransformSignal(add_noise_to_signal_with_proba, transforms_args), "merge_two_emd": TransformSignal(merge_two_emd, transforms_args), "randaugment": TransformSignal(construct_randaugment, transforms_args), "mask_along_time": TransformFFT(mask_along_time, transforms_args), "mask_along_frequency": TransformFFT(mask_along_frequency, transforms_args), } transform_list = [] for transform_name in dataset_args["transform_list"]: transform = [] for operation in transform_name: transform.append(transforms_dict[operation]) transform_list.append(transform) return transform_list
def test_transform_construction(): transforms = { "transform_list": [["identity"], ["mask_along_time", "identity"]] } constructed_transforms = [[TransformSignal(identity, transforms_args)], [ TransformFFT(mask_along_time, transforms_args), TransformSignal(identity, transforms_args) ]] compare(construct_transforms(transforms, transforms_args), constructed_transforms)
def test_data_recovery(): train_sample, _, _ = get_dummy_sample() X = train_sample[0][0] datum = Datum(X=X, y=train_sample[0][1]) datum = TransformSignal(identity)(TransformFFT(identity)(datum)) assert_almost_equal(datum.X.numpy(), X, decimal=3)
def test_delay_signal(): train_sample, _, _ = get_dummy_sample() transf = TransformSignal(delay_signal, transforms_args) X = train_sample[0][0] datum = Datum(X=X, y=train_sample[0][1]) datum = transf(datum) value_cutoff = int(np.round(transforms_args["magnitude"] * X.shape[1])) assert_array_equal(X[:, -value_cutoff:], datum.X[:, :value_cutoff]) assert_array_equal(X[:, :-value_cutoff], datum.X[:, value_cutoff:])
def test_noise_addition(): transforms_args["magnitude"] = 0.1 train_sample, _, _ = get_dummy_sample() transf = TransformSignal(add_noise_to_signal, transforms_args) X = train_sample[0][0] scale = torch.mean(torch.abs(X)).item() datum = Datum(X=X, y=train_sample[0][1]) datum = transf(datum) remains = (datum.X - X) / (transforms_args["magnitude"] * 0.1) assert_almost_equal(np.mean(remains.numpy()) / scale, 0, 1) assert_almost_equal(np.var(remains.numpy()) / (scale * scale), 1, 1)
def test_randaugment(): train_sample, _, _ = get_dummy_sample() subset_aug_sample, subset_aug_labels = get_sample(train_sample, [["randaugment"]], sample_size=1, random_state=1) transforms_args["train_sample"] = train_sample transforms_args["label_index_dict"] = create_label_index_dict( subset_aug_sample, subset_aug_labels) transf = TransformSignal(randaugment, transforms_args) X = train_sample[0][0] datum = Datum(X=X, y=train_sample[0][1]) datum = transf(datum)
def test_signal_addition(): train_sample, _, _ = get_dummy_sample() subset_aug_sample, subset_aug_labels = get_sample(train_sample, [["merge_two_signals"]], sample_size=1, random_state=1) transforms_args["train_sample"] = train_sample transforms_args["label_index_dict"] = create_label_index_dict( subset_aug_sample, subset_aug_labels) transf = TransformSignal(merge_two_signals, transforms_args) X = train_sample[0][0] datum = Datum(X=X, y=train_sample[0][1]) datum = transf(datum) assert_array_almost_equal(X, datum.X, 5)
def test_add_noise_to_signal_with_proba(): transforms_args["magnitude"] = 0.1 train_sample, _, _ = get_dummy_sample() transf = TransformSignal(add_noise_to_signal_with_proba, transforms_args) random.seed(1) # returns 0.13 X = train_sample[0][0] datum = Datum(X=X, y=train_sample[0][1]) datum = transf(datum) assert_almost_equal(datum.X.numpy(), X) random.seed(0) # return 0.88 datum = transf(datum) scale = torch.mean(torch.abs(X)).item() remains = (datum.X - X) / (transforms_args["magnitude"] * 0.1) assert_almost_equal(np.mean(remains.numpy()) / scale, 0, 1) assert_almost_equal(np.var(remains.numpy()) / (scale * scale), 1, 1)
def test_add_noise_to_signal_only_one_signal(): transforms_args["magnitude"] = 0.1 train_sample, _, _ = get_dummy_sample() transf = TransformSignal(add_noise_to_signal_only_one_signal, transforms_args) random.seed(1) # returns 0.1 X = train_sample[0][0] datum = Datum(X=X, y=train_sample[0][1]) datum = transf(datum) assert_almost_equal(datum.X[1, :].numpy(), X[1, :]) random.seed(0) # returns 0.8 X = train_sample[0][0] datum = Datum(X=X, y=train_sample[0][1]) datum = transf(datum) assert_almost_equal(datum.X[0, :].numpy(), X[0, :])
def create_transforms_and_subset(train_dataset, dataset_args, sample_size, transforms_args, i): train_subset = train_dataset train_dataset.change_transform_list([[TransformSignal(identity)]]) # then, find what will be the labels of augmented data, without constructing transforms subset_aug_sample, subset_aug_labels = get_sample( train_dataset, dataset_args["transform_list"], sample_size, random_state=i) # Define everything needed to construct transforms, even if "train_subset" will be replaced # afterwards. transforms_args["train_sample"] = train_dataset transforms_args["label_index_dict"] = create_label_index_dict( subset_aug_sample, subset_aug_labels) # Constructs transforms dataset_args["constructed_transform_list"] = construct_transforms( dataset_args, transforms_args) # Update train dataset train_dataset.change_transform_list( dataset_args["constructed_transform_list"]) train_subset = Subset(dataset=train_dataset, indices=subset_aug_sample) return dataset_args, train_subset