code: def run_experiment_with_visualization(
      input_features, output_features, dataset
  ):
      """Helper method to run an experiment with visualization enabled.
  
      Does not garbage collect.
      """
      output_directory = os.path.dirname(dataset)
      config = {
          "input_features": input_features,
          "output_features": output_features,
          "combiner": {"type": "concat", "output_size": 14},
          TRAINER: {"epochs": 2, BATCH_SIZE: 128},
      }
  
      args = {
          "config": config,
          "skip_save_processed_input": False,
          "skip_save_progress": False,
          "skip_save_unprocessed_output": False,
          "skip_save_eval_stats": False,
          "dataset": dataset,
          "output_directory": output_directory,
      }
  
      _, _, _, _, experiment_dir = experiment_cli(**args)
  
      return experiment_dir
  
imports: import glob
  import json
  import os
  import random
  import subprocess
  import numpy
  import pytest
  from ludwig.constants import BATCH_SIZE, ENCODER, TRAINER, TYPE
  from ludwig.experiment import experiment_cli
  from ludwig.globals import DESCRIPTION_FILE_NAME, PREDICTIONS_PARQUET_FILE_NAME, TEST_STATISTICS_FILE_NAME
  from ludwig.utils.data_utils import get_split_path
  from ludwig.visualize import _extract_ground_truth_values
  from tests.integration_tests.test_visualization_api import obtain_df_splits
  from tests.integration_tests.utils import bag_feature, binary_feature, category_feature, generate_data, number_feature, sequence_feature, set_feature, text_feature
label_desc: Use image node_id 1 for calling a global function with example usage: run_experiment_with_visualization(input_features, output_features, dataset) and returns: experiment_dir