import argparse import yaml def parse_args(): parser = argparse.ArgumentParser(description="Model Training and Testing") parser.add_argument( "--config", type=str, required=True, help="Path to the configuration file" ) args = parser.parse_args() # Load YAML configuration if args.config: with open(args.config, "r") as file: config = yaml.safe_load(file) else: raise ValueError("Configuration file path must be provided using --config") # Update configuration with command-line arguments # Merge 'basic' configuration into the root dictionary # config.update(config.get('basic', {})) # Add adaptive configuration based on external commands if "data" in config and "type" in config["data"]: config["data"]["type"] = config["basic"].get("dataset", config["data"]["type"]) if "model" in config and "type" in config["model"]: config["model"]["type"] = config["basic"].get("model", config["model"]["type"]) if "model" in config and "rnn_units" in config["model"]: config["model"]["rnn_units"] = config["basic"].get( "rnn", config["model"]["rnn_units"] ) if "model" in config and "embed_dim" in config["model"]: config["model"]["embed_dim"] = config["basic"].get( "emb", config["model"]["embed_dim"] ) if "data" in config and "sample" in config["data"]: config["data"]["sample"] = config["basic"].get( "sample", config["data"]["sample"] ) if "train" in config and "device" in config["train"]: config["train"]["device"] = config["basic"].get( "device", config["train"]["device"] ) if "train" in config and "debug" in config["train"]: config["train"]["debug"] = config["basic"].get( "debug", config["train"]["debug"] ) if "cuda" in config: config["cuda"] = config["basic"].get("cuda", config["cuda"]) if "mode" in config: config["mode"] = config["basic"].get("mode", config["mode"]) return config