Пример #1
0
def main():
    config = Configuration()

    if config.case_base_for_inference:
        dataset: FullDataset = FullDataset(config.case_base_folder,
                                           config,
                                           training=False)
    else:
        dataset: FullDataset = FullDataset(config.training_data_folder,
                                           config,
                                           training=False)

    dataset.load()
    dataset = Representation.convert_dataset_to_baseline_representation(
        config, dataset)

    checker = ConfigChecker(config, dataset, 'snn', training=False)
    checker.pre_init_checks()

    architecture = initialise_snn(config, dataset, False)

    checker.post_init_checks(architecture)

    inference = Inference(config, architecture, dataset)

    if config.print_model:
        tf.keras.utils.plot_model(architecture.encoder.model,
                                  to_file='model.png',
                                  show_shapes=True,
                                  expand_nested=True)

    print('Ensure right model file is used:')
    print(config.directory_model_to_use, '\n')

    inference.infer_test_dataset()
Пример #2
0
def main():
    config = Configuration()

    if config.case_base_for_inference:
        dataset: FullDataset = FullDataset(config.case_base_folder, config, training=False)
    else:
        dataset: FullDataset = FullDataset(config.training_data_folder, config, training=False)

    dataset.load()

    # select which part of the test dataset to test
    start_index = 0  # dataset.num_test_instances
    end_index = dataset.num_test_instances  # dataset.num_test_instances

    # Output interval of how many examples have been compared so far. < 0 for no output
    temp_output_interval = -1
    use_relevant_only = True
    implemented_algorithms = ['dtw', 'dtw_weighting_nbr_features', 'feature_based']
    algorithm_used = implemented_algorithms[0]
    distance_to_sim_methods = ['1/(1+d)', 'div_max', 'min_max_scaling']
    distance_to_sim_method = distance_to_sim_methods[0]

    relevant_type = 'Individual' if config.individual_relevant_feature_selection else 'Group based'
    print('Algorithm used:', algorithm_used)
    print('Used relevant only:', use_relevant_only)
    print('Type of feature selection:', relevant_type)
    print('Start index:', start_index)
    print('End index:', end_index)
    print('Number of parallel threads:', config.max_parallel_cores)
    print('Case Based used for inference:', config.case_base_for_inference)
    print()

    execute_baseline_test(dataset, start_index, end_index, config.max_parallel_cores, algorithm_used, config.k_of_knn,
                          temp_output_interval, use_relevant_only, distance_to_sim_method)
Пример #3
0
def execute_baseline_test(dataset: FullDataset, start_index, end_index, nbr_threads, algorithm, k_of_knn,
                          temp_output_interval, use_relevant_only=False, conversion_method=None):
    evaluator = Evaluator(dataset, end_index - start_index, k_of_knn)

    if algorithm == 'feature_based':
        # Load features from TSFresh
        dataset.load_feature_based_representation()

    start_time = perf_counter()

    for test_index in range(start_index, end_index):
        results = np.zeros(dataset.num_train_instances)

        # Split the training examples into n chunks, where n == the number of threads that should be used.
        chunks = np.array_split(range(dataset.num_train_instances), nbr_threads)

        threads = []
        counter = Counter(dataset.num_train_instances, temp_output_interval)
        manager = multiprocessing.Manager()
        return_dict = manager.dict()

        for i, chunk in enumerate(chunks):
            # Important: Passing object instances as args to multiprocessing.Process may lead to problems
            # Use carefully and ensure correct passing
            # proc_id, return_dict, counter, dataset, test_index, indices_train_examples, algorithm, relevant_only
            # chunk, dataset, test_index, use_relevant_only, counter, algorithm_used, i, return_dict
            args = (i, return_dict, counter, dataset, test_index, chunk, algorithm, use_relevant_only)
            t = multiprocessing.Process(target=run, args=args)
            t.start()
            threads.append(t)

        for i, chunk in enumerate(chunks):
            threads[i].join()
            results[chunk] = return_dict.get(i)

        # If algorithm returns distance instead of similarity
        if algorithm in ['dtw', 'dtw_weighting_nbr_features', 'feature_based']:
            results = distance_to_sim(results, conversion_method)

        # Add additional empty line if temp. outputs are enabled
        if temp_output_interval > 0:
            print('')
        evaluator.add_single_example_results(results, test_index)

    elapsed_time = perf_counter() - start_time
    evaluator.calculate_results()
    evaluator.print_results(elapsed_time)
Пример #4
0
def main():
    config = Configuration()
    config.print_detailed_config_used_for_training()

    dataset = FullDataset(config.training_data_folder, config, training=True)
    dataset.load()
    dataset = Representation.convert_dataset_to_baseline_representation(
        config, dataset)

    checker = ConfigChecker(config, dataset, 'snn', training=True)
    checker.pre_init_checks()

    snn = initialise_snn(config, dataset, True)
    snn.print_detailed_model_info()

    if config.print_model:
        tf.keras.utils.plot_model(snn.encoder.model,
                                  to_file='model.png',
                                  show_shapes=True,
                                  expand_nested=True)

    checker.post_init_checks(snn)

    start_time_string = datetime.now().strftime("%m-%d_%H-%M-%S")

    print('---------------------------------------------')
    print('Training:')
    print('---------------------------------------------')
    print()
    optimizer = SNNOptimizer(snn, dataset, config)
    optimizer.optimize()

    print()
    print('---------------------------------------------')
    print('Inference:')
    print('---------------------------------------------')
    print()
    change_model(config, start_time_string)

    if config.case_base_for_inference:
        dataset: FullDataset = FullDataset(config.case_base_folder,
                                           config,
                                           training=False)
    else:
        dataset: FullDataset = FullDataset(config.training_data_folder,
                                           config,
                                           training=False)

    dataset.load()
    dataset = Representation.convert_dataset_to_baseline_representation(
        config, dataset)

    snn = initialise_snn(config, dataset, False)

    inference = Inference(config, snn, dataset)
    inference.infer_test_dataset()
def main():
    config = Configuration()

    p = psutil.Process()
    cores = p.cpu_affinity()
    p.cpu_affinity(cores[0:config.max_parallel_cores])

    # Feature extraction for full dataset is disabled by default because of high computational demands

    # dataset = FullDataset(config.training_data_folder, config, training=True)
    # dataset.load()
    # rp: TSFreshRepresentation = TSFreshRepresentation(config, dataset)
    # rp.create_representation()

    dataset = FullDataset(config.case_base_folder, config, training=True)
    dataset.load()

    rp: TSFreshRepresentation = TSFreshRepresentation(config, dataset)
    rp.create_representation(for_case_base=True)
Пример #6
0
def main():
    config = Configuration()

    dataset = FullDataset(config.training_data_folder, config, training=True)
    dataset.load()
    dataset = Representation.convert_dataset_to_baseline_representation(
        config, dataset)

    checker = ConfigChecker(config, dataset, 'snn', training=True)
    checker.pre_init_checks()

    snn = initialise_snn(config, dataset, True)
    snn.print_detailed_model_info()

    checker.post_init_checks(snn)

    print('Training:')
    optimizer = SNNOptimizer(snn, dataset, config)
    optimizer.optimize()
Пример #7
0
def main():
    # suppress debugging messages of TensorFlow
    os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

    config = Configuration()

    dataset = FullDataset(config.training_data_folder, config, training=True)
    dataset.load()

    checker = ConfigChecker(config, dataset, 'snn', training=True)
    checker.pre_init_checks()

    snn = initialise_snn(config, dataset, True)
    snn.print_detailed_model_info()

    checker.post_init_checks(snn)

    print('Training:')
    optimizer = SNNOptimizer(snn, dataset, config)
    optimizer.optimize()
    def init_architecture(self, selection):

        if selection == 'snn':
            dataset: FullDataset = FullDataset(
                self.config.training_data_folder, self.config, training=False)
            dataset.load()
            self.architecture = initialise_snn(self.config, dataset, False)
        elif selection == 'cbs':
            self.architecture = CBS(self.config, False)
        else:
            raise ValueError('Unknown architecture variant')
Пример #9
0
 def inference_during_training(self, epoch):
     if self.config.use_inference_test_during_training and epoch != 0:
         if epoch % self.config.inference_during_training_epoch_interval == 0:
             print("Inference at epoch: ", epoch)
             dataset2: FullDataset = FullDataset(self.config.training_data_folder, self.config, training=False)
             dataset2.load()
             self.config.directory_model_to_use = self.dir_name_last_model_saved
             print("self.dir_name_last_model_saved: ", self.dir_name_last_model_saved)
             print("self.config.filename_model_to_use: ", self.config.directory_model_to_use)
             architecture2 = initialise_snn(self.config, dataset2, False)
             inference = Inference(self.config, architecture2, dataset2)
             inference.infer_test_dataset()
Пример #10
0
def main():
    # suppress debugging messages of TensorFlow
    os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

    config = Configuration()
    config.print_detailed_config_used_for_training()

    dataset = FullDataset(config.training_data_folder, config, training=True)
    dataset.load()

    checker = ConfigChecker(config, dataset, 'snn', training=True)
    checker.pre_init_checks()

    snn = initialise_snn(config, dataset, True)
    snn.print_detailed_model_info()

    checker.post_init_checks(snn)

    start_time_string = datetime.now().strftime("%m-%d_%H-%M-%S")

    print('---------------------------------------------')
    print('Training:')
    print('---------------------------------------------')
    print()
    optimizer = SNNOptimizer(snn, dataset, config)
    optimizer.optimize()

    print()
    print('---------------------------------------------')
    print('Inference:')
    print('---------------------------------------------')
    print()
    change_model(config, start_time_string)

    if config.case_base_for_inference:
        dataset: FullDataset = FullDataset(config.case_base_folder,
                                           config,
                                           training=False)
    else:
        dataset: FullDataset = FullDataset(config.training_data_folder,
                                           config,
                                           training=False)

    dataset.load()

    snn = initialise_snn(config, dataset, False)

    inference = Inference(config, snn, dataset)
    inference.infer_test_dataset()
Пример #11
0
def main():
    # suppress debugging messages of TensorFlow
    os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

    config = Configuration()

    if config.case_base_for_inference:
        dataset: FullDataset = FullDataset(config.case_base_folder,
                                           config,
                                           training=False)
    else:
        dataset: FullDataset = FullDataset(config.training_data_folder,
                                           config,
                                           training=False)

    dataset.load()

    checker = ConfigChecker(config, dataset, 'snn', training=False)
    checker.pre_init_checks()

    architecture = initialise_snn(config, dataset, False)

    checker.post_init_checks(architecture)

    inference = Inference(config, architecture, dataset)

    if config.print_model:
        tf.keras.utils.plot_model(architecture.encoder.model,
                                  to_file='model.png',
                                  show_shapes=True,
                                  expand_nested=True)

    print('Ensure right model file is used:')
    print(config.directory_model_to_use, '\n')

    inference.infer_test_dataset()
Пример #12
0
def main():
    config = Configuration()

    if config.case_base_for_inference:
        dataset: FullDataset = FullDataset(config.case_base_folder,
                                           config,
                                           training=False)
    else:
        dataset: FullDataset = FullDataset(config.training_data_folder,
                                           config,
                                           training=False)

    dataset.load()

    # Select which part of the test dataset to infer, mainly for debugging
    start_index = 0
    end_index = dataset.num_test_instances  # dataset.num_test_instances

    relevant_type = 'Individual' if config.individual_relevant_feature_selection else 'Group based'
    print('Algorithm used:', config.baseline_algorithm)
    print('Used relevant only:', config.baseline_use_relevant_only)
    print('Type of feature selection:', relevant_type)
    print('Start index:', start_index)
    print('End index:', end_index)
    print('Number of parallel threads:', config.max_parallel_cores)
    print('Case Based used for inference:', config.case_base_for_inference)
    print()

    if dataset.is_third_party_dataset and (
            config.baseline_use_relevant_only or config.baseline_algorithm
            == BaselineAlgorithm.FEATURE_BASED_TS_FRESH):
        raise ValueError(
            'Third party datasets can not be used in combination with feature restriction, '
            'e.g. reduction to relevant feature or the ts fresh algorithm.')

    execute_baseline_test(config, dataset, start_index, end_index)
Пример #13
0
def main():
    config = Configuration()
    config.print_detailed_config_used_for_training()

    dataset = FullDataset(config.training_data_folder, config, training=True, model_selection=True)
    dataset.load()
    dataset = Representation.convert_dataset_to_baseline_representation(config, dataset)

    checker = ConfigChecker(config, dataset, 'snn', training=True)
    checker.pre_init_checks()

    snn = initialise_snn(config, dataset, True)
    snn.print_detailed_model_info()

    if config.print_model:
        tf.keras.utils.plot_model(snn.encoder.model, to_file='model.png', show_shapes=True, expand_nested=True)

    checker.post_init_checks(snn)

    start_time_string = datetime.now().strftime("%m-%d_%H-%M-%S")

    print('---------------------------------------------')
    print('Training:')
    print('---------------------------------------------')
    print()
    optimizer = SNNOptimizer(snn, dataset, config)
    optimizer.optimize()

    print()
    print('---------------------------------------------')
    print('Selecting (of the model for final evaluation):')
    print('---------------------------------------------')
    print()
    num_of_selection_tests = config.number_of_selection_tests
    config.use_masking_regularization = False
    score_valid_to_model_loss = {}
    for i in range(num_of_selection_tests):
        loss_of_selected_model = change_model(config, start_time_string, num_of_selction_iteration=i)

        if config.case_base_for_inference:
            dataset: FullDataset = FullDataset(config.case_base_folder, config, training=False, model_selection=True)
        else:
            dataset: FullDataset = FullDataset(config.training_data_folder, config, training=False, model_selection=True)
        dataset.load()
        dataset = Representation.convert_dataset_to_baseline_representation(config, dataset)

        snn = initialise_snn(config, dataset, False)

        inference = Inference(config, snn, dataset)
        curr_model_score = inference.infer_test_dataset()

        score_valid_to_model_loss[curr_model_score] = loss_of_selected_model

    print("score_valid_to_model_loss: ", score_valid_to_model_loss)

    print()
    print('---------------------------------------------')
    print('Inference:')
    print('---------------------------------------------')
    print()

    max_score = max(list(score_valid_to_model_loss.keys()))
    min_loss = score_valid_to_model_loss[max_score]
    print("Model with the following loss is selected for the final evaluation:", min_loss)

    change_model(config, start_time_string, get_model_by_loss_value=min_loss)

    if config.case_base_for_inference:
        dataset: FullDataset = FullDataset(config.case_base_folder, config, training=False)
    else:
        dataset: FullDataset = FullDataset(config.training_data_folder, config, training=False)

    dataset.load()
    dataset = Representation.convert_dataset_to_baseline_representation(config, dataset)

    snn = initialise_snn(config, dataset, False)

    inference = Inference(config, snn, dataset)
    inference.infer_test_dataset()
Пример #14
0
def main():
    config = Configuration()

    dataset = FullDataset(config.training_data_folder, config, training=True)
    dataset.load()

    rp: RocketRepresentation = RocketRepresentation(config, dataset)
    rp.create_representation()

    dataset = FullDataset(config.case_base_folder, config, training=True)
    dataset.load()

    rp: RocketRepresentation = RocketRepresentation(config, dataset)
    rp.create_representation(for_case_base=True)

    dataset = FullDataset(config.training_data_folder,
                          config,
                          training=False,
                          model_selection=True)
    dataset.load()

    rp: RocketRepresentation = RocketRepresentation(config, dataset)
    rp.create_representation(for_valid=True)
def main():
    config = Configuration()

    # Define different version of original configuration
    #config_2 = copy(config)
    #config_2.hyper_file = config_2.hyper_file_folder + 'cnn2d_withAddInput_Graph_o1_GlobAtt_o2_2_HO_2_a.json'  # wie Standard, aber owl2vec als Graph Features added
    config_3 = copy(config)
    config_3.hyper_file = config_3.hyper_file_folder + 'cnn2d_withAddInput_Graph_o1_GlobAtt_o2_2_HO_2_b.json'  # wie Standard, aber Linear transformation an
    config_4 = copy(config)
    config_4.hyper_file = config_4.hyper_file_folder + 'cnn2d_withAddInput_Graph_o1_GlobAtt_o2_2_HO_2_c.json'  # wie Standard, aber nur Context Ausgabe

    ####
    '''
    config_2 = copy(config)
    config_2.batch_distribution = {
        BatchSubsetType.DISTRIB_BASED_ON_DATASET: 0.75,
        BatchSubsetType.EQUAL_CLASS_DISTRIB: 0.25
        }
    
    config_3 = copy(config)
    config_3.hyper_file = config_3.hyper_file_folder + 'cnn2d_withAddInput_Graph_o1_GlobAtt_o2_2_HO_2.json' # Owl2vec after 2DCNN Removed, film on
    config_4 = copy(config)
    config_4.hyper_file = config_4.hyper_file_folder + 'cnn2d_withAddInput_Graph_o1_GlobAtt_o2_2_HO_3.json'  # Owl2vec after 2DCNN Removed, film off
    config_5 = copy(config)
    config_5.hyper_file = config_5.hyper_file_folder + 'cnn2d_withAddInput_Graph_o1_GlobAtt_o2_2_HO_4.json'  # wie Standard, aber Gradient Cap 1
    config_6 = copy(config)
    config_6.hyper_file = config_6.hyper_file_folder + 'cnn2d_withAddInput_Graph_o1_GlobAtt_o2_2_HO_5.json'  # wie Standard, aber 256,128,64
    config_7 = copy(config)
    config_7.hyper_file = config_7.hyper_file_folder + 'cnn2d_withAddInput_Graph_o1_GlobAtt_o2_2_HO_6.json'  # wie Standard, aber 512,256,128
    config_8 = copy(config)
    config_8.hyper_file = config_8.hyper_file_folder + 'cnn2d_withAddInput_Graph_o1_GlobAtt_o2_2_HO_7.json'  # wie Standard, aber 128,64,32
    config_9 = copy(config)
    config_9.hyper_file = config_9.hyper_file_folder + 'cnn2d_withAddInput_Graph_o1_GlobAtt_o2_2_HO_8.json'  # wie Standard, aber 256,128,128
    config_10 = copy(config)
    config_10.hyper_file = config_10.hyper_file_folder + 'cnn2d_withAddInput_Graph_o1_GlobAtt_o2_2_HO_9.json'  # wie Standard, aber 128,128,128, FC 386-256, CNN2d 128,64,3
    config_11 = copy(config)
    config_11.hyper_file = config_11.hyper_file_folder + 'cnn2d_withAddInput_Graph_o1_GlobAtt_o2_2_HO_10.json'  # wie Standard, aber 128,64,64, FC 386-256, CNN2d 128,64,3
    config_12 = copy(config)
    config_12.hyper_file = config_12.hyper_file_folder + 'cnn2d_withAddInput_Graph_o1_GlobAtt_o2_2_HO_11.json'  # wie Standard, aber 256,128,128 nur mit allem aktiviert
    '''
    '''
    config_3 = copy(config)
    config_3.hyper_file = config_3.hyper_file_folder + 'cnn2d_with_graph_test_Readout_WOowl2vec.json'
    config_4 = copy(config)
    config_4.hyper_file = config_4.hyper_file_folder + 'cnn2d_with_graph_test_Readout_lrSmaller.json'
    config_5 = copy(config)
    config_5.hyper_file = config_5.hyper_file_folder + 'cnn2d_with_graph_test_Readout_WOAttributeWise.json'
    '''
    #list_of_configs = [config_3, config_4, config_5, config_6, config_7, config_8, config_9,config_10, config_11]
    list_of_configs = [config, config_3, config_4]
    #list_of_configs = [config, config_2, config_3,config_4,config_5, config_6,config_7,config_8,config_9,config_10,config_11]

    for i, config in enumerate(list_of_configs):
        print("Run number of config:", i)
        config.print_detailed_config_used_for_training()

        dataset = FullDataset(config.training_data_folder,
                              config,
                              training=True,
                              model_selection=True)
        dataset.load()
        dataset = Representation.convert_dataset_to_baseline_representation(
            config, dataset)

        checker = ConfigChecker(config, dataset, 'snn', training=True)
        checker.pre_init_checks()

        snn = initialise_snn(config, dataset, True)
        snn.print_detailed_model_info()

        if config.print_model:
            tf.keras.utils.plot_model(snn.encoder.model,
                                      to_file='model.png',
                                      show_shapes=True,
                                      expand_nested=True)

        checker.post_init_checks(snn)

        start_time_string = datetime.now().strftime("%m-%d_%H-%M-%S")

        print('---------------------------------------------')
        print('Training:')
        print('---------------------------------------------')
        print()
        optimizer = SNNOptimizer(snn, dataset, config)
        optimizer.optimize()

        print()
        print('---------------------------------------------')
        print('Evaluation of the current config:')
        print('---------------------------------------------')
        print()
        num_of_selection_tests = config.number_of_selection_tests
        score_valid_to_model_loss = {}
        for i in range(num_of_selection_tests):
            loss_of_selected_model = change_model(config,
                                                  start_time_string,
                                                  num_of_selction_iteration=i)

            if config.case_base_for_inference:
                dataset: FullDataset = FullDataset(config.case_base_folder,
                                                   config,
                                                   training=False,
                                                   model_selection=True)
            else:
                dataset: FullDataset = FullDataset(config.training_data_folder,
                                                   config,
                                                   training=False,
                                                   model_selection=True)
            dataset.load()
            dataset = Representation.convert_dataset_to_baseline_representation(
                config, dataset)

            snn = initialise_snn(config, dataset, False)

            inference = Inference(config, snn, dataset)
            curr_model_score = inference.infer_test_dataset()

            score_valid_to_model_loss[
                curr_model_score] = loss_of_selected_model

        # loop to sum all values to compute the mean:
        res = 0
        for val in score_valid_to_model_loss.values():
            res += val
        loss_mean = res / len(score_valid_to_model_loss)

        for val in score_valid_to_model_loss.keys():
            res += val
        mean_score = res / len(score_valid_to_model_loss)

        # printing result
        print("Run: ", i, " loss mean:" + str(loss_mean),
              " score mean: " + str(mean_score))
        print("Run: ", i, " score_valid_to_model_loss:",
              score_valid_to_model_loss)
        '''
    def create_representation(self, for_case_base=False, for_valid=False):
        rocket = Rocket(num_kernels=self.config.rocket_kernels,
                        normalise=False,
                        random_state=self.config.rocket_random_seed)

        # Cast is necessary because rocket seems to expect 64 bit values
        x_train_casted = self.dataset.x_train.astype('float64')
        x_test_casted = self.dataset.x_test.astype('float64')

        print('Transforming from array to dataframe...\n')
        x_train_df = self.array_to_ts_df(x_train_casted)
        x_test_df = self.array_to_ts_df(x_test_casted)

        if for_case_base and self.config.force_fit_on_full_training_data:
            print('Forced fitting on the full training dataset is enabled. '
                  'Loading full training dataset before fitting...\n')

            dataset_full_train = FullDataset(self.config.training_data_folder,
                                             self.config,
                                             training=True)
            dataset_full_train.load()
            full_train_casted = dataset_full_train.x_train.astype('float64')
            full_train_df = self.array_to_ts_df(full_train_casted)

            print('Started fitting ...')
            rocket.fit(full_train_df)

        else:
            print('Started fitting ...')
            rocket.fit(x_train_df)

        print('Finished fitting.')

        self.x_train_features = rocket.transform(x_train_df).values
        print('\nFinished fitting the train dataset. Shape:',
              self.x_train_features.shape)

        self.x_test_features = rocket.transform(x_test_df).values
        print('\nFinished fitting the test dataset. Shape:',
              self.x_test_features.shape)

        if for_valid == True:
            #print("Saved as: ", self.dataset.dataset_folder + self.config.rocket_features_train_file)
            np.save(
                self.dataset.dataset_folder +
                self.config.rocket_features_train_file, self.x_train_features)
            #print('\nSaved the train dataset. Shape:', self.x_train_features.shape)
            print(
                "Saved as: ", self.dataset.dataset_folder +
                self.config.rocket_features_valid_file)
            np.save(
                self.dataset.dataset_folder +
                self.config.rocket_features_valid_file, self.x_test_features)
            print('\nSaved the train dataset. Shape:',
                  self.x_test_features.shape)
        else:
            print(
                "Saved as: ", self.dataset.dataset_folder +
                self.config.rocket_features_train_file)
            np.save(
                self.dataset.dataset_folder +
                self.config.rocket_features_train_file, self.x_train_features)
            print('\nSaved the train dataset. Shape:',
                  self.x_train_features.shape)
            print(
                "Saved as: ", self.dataset.dataset_folder +
                self.config.rocket_features_test_file)
            np.save(
                self.dataset.dataset_folder +
                self.config.rocket_features_test_file, self.x_test_features)
            print('\nSaved the train dataset. Shape:',
                  self.x_test_features.shape)