# API Reference (Google Gemini Translation) This document provides a detailed description of all API interfaces, classes, and functions for the emotion and physiological state change prediction model. ## Table of Contents 1. [Model Classes](#model-classes) 2. [Data Processing Classes](#data-processing-classes) 3. [Utility Classes](#utility-classes) 4. [Loss Functions](#loss-functions) 5. [Evaluation Metrics](#evaluation-metrics) 6. [Factory Functions](#factory-functions) 7. [Command-Line Interface](#command-line-interface) ## Model Classes ### `PADPredictor` A Multi-Layer Perceptron-based predictor for emotion and physiological state changes. ```python class PADPredictor(nn.Module): def __init__(self, input_dim: int = 7, output_dim: int = 3, hidden_dims: list = [512, 256, 128], dropout_rate: float = 0.3, weight_init: str = "xavier_uniform", bias_init: str = "zeros") ``` #### Parameters - `input_dim` (int): Input dimension, defaults to 7 (User PAD 3D + Vitality 1D + AI Current PAD 3D) - `output_dim` (int): Output dimension, defaults to 3 (ΔPAD 3D, Pressure is dynamically calculated via formula) - `hidden_dims` (list): List of hidden layer dimensions, defaults to [512, 256, 128] - `dropout_rate` (float): Dropout probability, defaults to 0.3 - `weight_init` (str): Weight initialization method, defaults to "xavier_uniform" - `bias_init` (str): Bias initialization method, defaults to "zeros" #### Methods ##### `forward(self, x: torch.Tensor) -> torch.Tensor` Forward pass. **Parameters:** - `x` (torch.Tensor): Input tensor with shape (batch_size, input_dim) **Returns:** - `torch.Tensor`: Output tensor with shape (batch_size, output_dim) **Example:** ```python import torch from src.models.pad_predictor import PADPredictor model = PADPredictor() input_data = torch.randn(4, 7) # batch_size=4, input_dim=7 output = model(input_data) print(f"Output shape: {output.shape}") # torch.Size([4, 3]) ``` ##### `predict_components(self, x: torch.Tensor) -> Dict[str, torch.Tensor]` Predicts and decomposes output components. **Parameters:** - `x` (torch.Tensor): Input tensor **Returns:** - `Dict[str, torch.Tensor]`: Dictionary containing various components - `'delta_pad'`: ΔPAD (3D) - `'delta_pressure'`: ΔPressure (1D, dynamically calculated) - `'confidence'`: Confidence (1D, optional) **Example:** ```python components = model.predict_components(input_data) print(f"ΔPAD shape: {components['delta_pad'].shape}") # torch.Size([4, 3]) print(f"ΔPressure shape: {components['delta_pressure'].shape}") # torch.Size([4, 1]) print(f"Confidence shape: {components['confidence'].shape}") # torch.Size([4, 1]) ``` ##### `get_model_info(self) -> Dict[str, Any]` Retrieves model information. **Returns:** - `Dict[str, Any]`: Dictionary containing model information **Example:** ```python info = model.get_model_info() print(f"Model type: {info['model_type']}") print(f"Total parameters: {info['total_parameters']}") print(f"Trainable parameters: {info['trainable_parameters']}") ``` ##### `save_model(self, filepath: str, include_optimizer: bool = False, optimizer: Optional[torch.optim.Optimizer] = None)` Saves the model to a file. **Parameters:** - `filepath` (str): Path to save the model - `include_optimizer` (bool): Whether to include optimizer state, defaults to False - `optimizer` (Optional[torch.optim.Optimizer]): Optimizer object **Example:** ```python model.save_model("model.pth", include_optimizer=True, optimizer=optimizer) ``` ##### `load_model(cls, filepath: str, device: str = 'cpu') -> 'PADPredictor'` Loads the model from a file. **Parameters:** - `filepath` (str): Path to the model file - `device` (str): Device type, defaults to 'cpu' **Returns:** - `PADPredictor`: Loaded model instance **Example:** ```python loaded_model = PADPredictor.load_model("model.pth", device='cuda') ``` ##### `freeze_layers(self, layer_names: list = None)` Freezes parameters of specified layers. **Parameters:** - `layer_names` (list): List of layer names to freeze; if None, all layers are frozen **Example:** ```python # Freeze all layers model.freeze_layers() # Freeze specific layers model.freeze_layers(['network.0.weight', 'network.2.weight']) ``` ##### `unfreeze_layers(self, layer_names: list = None)` Unfreezes parameters of specified layers. **Parameters:** - `layer_names` (list): List of layer names to unfreeze; if None, all layers are unfrozen ## Data Processing Classes ### `DataPreprocessor` Data preprocessor responsible for feature and label scaling. ```python class DataPreprocessor: def __init__(self, feature_scaler: str = "standard", label_scaler: str = "standard", feature_range: tuple = None, label_range: tuple = None) ``` #### Parameters - `feature_scaler` (str): Feature scaling method, defaults to "standard" - `label_scaler` (str): Label scaling method, defaults to "standard" - `feature_range` (tuple): Feature range for MinMax scaling - `label_range` (tuple): Label range for MinMax scaling #### Methods ##### `fit(self, features: np.ndarray, labels: np.ndarray) -> 'DataPreprocessor'` Fits preprocessor parameters. **Parameters:** - `features` (np.ndarray): Training feature data - `labels` (np.ndarray): Training label data **Returns:** - `DataPreprocessor`: Self instance ##### `transform(self, features: np.ndarray, labels: np.ndarray = None) -> tuple` Transforms data. **Parameters:** - `features` (np.ndarray): Input feature data - `labels` (np.ndarray, optional): Input label data **Returns:** - `tuple`: (transformed features, transformed labels) ##### `fit_transform(self, features: np.ndarray, labels: np.ndarray = None) -> tuple` Fits and transforms data. ##### `inverse_transform(self, features: np.ndarray, labels: np.ndarray = None) -> tuple` Inverse transforms data. ##### `save(self, filepath: str)` Saves the preprocessor to a file. ##### `load(cls, filepath: str) -> 'DataPreprocessor'` Loads the preprocessor from a file. **Example:** ```python from src.data.preprocessor import DataPreprocessor # Create preprocessor preprocessor = DataPreprocessor( feature_scaler="standard", label_scaler="standard" ) # Fit and transform data processed_features, processed_labels = preprocessor.fit_transform(train_features, train_labels) # Save preprocessor preprocessor.save("preprocessor.pkl") # Load preprocessor loaded_preprocessor = DataPreprocessor.load("preprocessor.pkl") ``` ### `SyntheticDataGenerator` Synthetic data generator for creating training and test data. ```python class SyntheticDataGenerator: def __init__(self, num_samples: int = 1000, seed: int = 42, noise_level: float = 0.1, correlation_strength: float = 0.5) ``` #### Parameters - `num_samples` (int): Number of samples to generate, defaults to 1000 - `seed` (int): Random seed, defaults to 42 - `noise_level` (float): Noise level, defaults to 0.1 - `correlation_strength` (float): Correlation strength, defaults to 0.5 #### Methods ##### `generate_data(self) -> tuple` Generates synthetic data. **Returns:** - `tuple`: (feature data, label data) ##### `save_data(self, features: np.ndarray, labels: np.ndarray, filepath: str, format: str = 'csv')` Saves data to a file. **Example:** ```python from src.data.synthetic_generator import SyntheticDataGenerator # Create data generator generator = SyntheticDataGenerator(num_samples=1000, seed=42) # Generate data features, labels = generator.generate_data() # Save data generator.save_data(features, labels, "synthetic_data.csv", format='csv') ``` ### `EmotionDataset` PyTorch Dataset class for emotion prediction tasks. ```python class EmotionDataset(Dataset): def __init__(self, features: np.ndarray, labels: np.ndarray, transform: callable = None) ``` #### Parameters - `features` (np.ndarray): Feature data - `labels` (np.ndarray): Label data - `transform` (callable): Data transformation function ## Utility Classes ### `InferenceEngine` Inference engine providing high-performance model inference. ```python class InferenceEngine: def __init__(self, model: nn.Module, preprocessor: DataPreprocessor = None, device: str = 'auto') ``` #### Methods ##### `predict(self, input_data: Union[list, np.ndarray]) -> Dict[str, Any]` Single sample prediction. **Parameters:** - `input_data`: Input data, can be a list or NumPy array **Returns:** - `Dict[str, Any]`: Dictionary of prediction results **Example:** ```python from src.utils.inference_engine import create_inference_engine # Create inference engine engine = create_inference_engine( model_path="model.pth", preprocessor_path="preprocessor.pkl" ) # Single sample prediction input_data = [0.5, 0.3, -0.2, 75.0, 0.1, 0.4, -0.1] result = engine.predict(input_data) print(f"ΔPAD: {result['delta_pad']}") print(f"Confidence: {result['confidence']}") ``` ##### `predict_batch(self, input_batch: Union[list, np.ndarray]) -> List[Dict[str, Any]]` Batch prediction. ##### `benchmark(self, num_samples: int = 1000, batch_size: int = 32) -> Dict[str, float]` Performance benchmarking. **Returns:** - `Dict[str, float]`: Performance statistics **Example:** ```python # Performance benchmarking stats = engine.benchmark(num_samples=1000, batch_size=32) print(f"Throughput: {stats['throughput']:.2f} samples/sec") print(f"Average latency: {stats['avg_latency']:.2f}ms") ``` ### `ModelTrainer` Model trainer providing full training pipeline management. ```python class ModelTrainer: def __init__(self, model: nn.Module, preprocessor: DataPreprocessor = None, device: str = 'auto') ``` #### Methods ##### `train(self, train_loader: DataLoader, val_loader: DataLoader, config: Dict[str, Any]) -> Dict[str, Any]` Trains the model. **Parameters:** - `train_loader` (DataLoader): Training data loader - `val_loader` (DataLoader): Validation data loader - `config` (Dict[str, Any]): Training configuration **Returns:** - `Dict[str, Any]`: Training history **Example:** ```python from src.utils.trainer import ModelTrainer # Create trainer trainer = ModelTrainer(model, preprocessor) # Training configuration config = { 'epochs': 100, 'learning_rate': 0.001, 'weight_decay': 1e-4, 'patience': 10, 'save_dir': './models' } # Start training history = trainer.train(train_loader, val_loader, config) ``` ##### `evaluate(self, test_loader: DataLoader) -> Dict[str, float]` Evaluates the model. ## Loss Functions ### `WeightedMSELoss` Weighted Mean Squared Error loss function. ```python class WeightedMSELoss(nn.Module): def __init__(self, delta_pad_weight: float = 1.0, delta_pressure_weight: float = 1.0, confidence_weight: float = 0.5, reduction: str = 'mean') ``` #### Parameters - `delta_pad_weight` (float): Weight for ΔPAD loss, defaults to 1.0 - `delta_pressure_weight` (float): Weight for ΔPressure loss, defaults to 1.0 - `confidence_weight` (float): Weight for confidence loss, defaults to 0.5 - `reduction` (str): Reduction method for the loss, defaults to 'mean' **Example:** ```python from src.models.loss_functions import WeightedMSELoss criterion = WeightedMSELoss( delta_pad_weight=1.0, delta_pressure_weight=1.0, confidence_weight=0.5 ) loss = criterion(predictions, targets) ``` ### `ConfidenceLoss` Confidence loss function. ```python class ConfidenceLoss(nn.Module): def __init__(self, reduction: str = 'mean') ``` ## Evaluation Metrics ### `RegressionMetrics` Regression evaluation metrics calculator. ```python class RegressionMetrics: def __init__(self) ``` #### Methods ##### `calculate_all_metrics(self, y_true: np.ndarray, y_pred: np.ndarray) -> Dict[str, float]` Calculates all regression metrics. **Parameters:** - `y_true` (np.ndarray): True values - `y_pred` (np.ndarray): Predicted values **Returns:** - `Dict[str, float]`: Dictionary containing all metrics **Example:** ```python from src.models.metrics import RegressionMetrics metrics_calculator = RegressionMetrics() metrics = metrics_calculator.calculate_all_metrics(true_labels, predictions) print(f"MSE: {metrics['mse']:.4f}") print(f"MAE: {metrics['mae']:.4f}") print(f"R²: {metrics['r2']:.4f}") ``` ### `PADMetrics` PAD-specific evaluation metrics. ```python class PADMetrics: def __init__(self) ``` #### Methods ##### `evaluate_predictions(self, predictions: np.ndarray, targets: np.ndarray) -> Dict[str, Any]` Evaluates PAD prediction results. ## Factory Functions ### `create_pad_predictor(config: Optional[Dict[str, Any]] = None) -> PADPredictor` Factory function for creating a PAD predictor. **Parameters:** - `config` (Dict[str, Any], optional): Configuration dictionary **Returns:** - `PADPredictor`: PAD predictor instance **Example:** ```python from src.models.pad_predictor import create_pad_predictor # Use default configuration model = create_pad_predictor() # Use custom configuration config = { 'dimensions': { 'input_dim': 7, 'output_dim': 4 or 3 }, 'architecture': { 'hidden_layers': [ {'size': 256, 'activation': 'ReLU', 'dropout': 0.3}, {'size': 128, 'activation': 'ReLU', 'dropout': 0.2} ] } } model = create_pad_predictor(config) ``` ### `create_inference_engine(model_path: str, preprocessor_path: str = None, device: str = 'auto') -> InferenceEngine` Factory function for creating an inference engine. **Parameters:** - `model_path` (str): Path to the model file - `preprocessor_path` (str, optional): Path to the preprocessor file - `device` (str): Device type **Returns:** - `InferenceEngine`: Inference engine instance ### `create_training_setup(config: Dict[str, Any]) -> tuple` Factory function for creating a training setup. **Parameters:** - `config` (Dict[str, Any]): Training configuration **Returns:** - `tuple`: (model, trainer, data loader) ## Command-Line Interface ### Main CLI Tool The project provides a unified command-line interface supporting various operations: ```bash emotion-prediction [options] ``` #### Available Commands - `train`: Trains the model - `predict`: Makes predictions - `evaluate`: Evaluates the model - `inference`: Inference script - `benchmark`: Performance benchmarking #### Train Command ```bash emotion-prediction train --config CONFIG_FILE [OPTIONS] ``` **Parameters:** - `--config, -c`: Path to the training configuration file (required) - `--output-dir, -o`: Output directory (default: ./outputs) - `--device`: Computing device (auto/cpu/cuda, default: auto) - `--resume`: Resume training from a checkpoint - `--epochs`: Override number of training epochs - `--batch-size`: Override batch size - `--learning-rate`: Override learning rate - `--seed`: Random seed (default: 42) - `--verbose, -v`: Verbose output - `--log-level`: Log level (DEBUG/INFO/WARNING/ERROR) **Example:** ```bash # Basic training emotion-prediction train --config configs/training_config.yaml # GPU training emotion-prediction train --config configs/training_config.yaml --device cuda # Resume from checkpoint emotion-prediction train --config configs/training_config.yaml --resume checkpoint.pth ``` #### Predict Command ```bash emotion-prediction predict --model MODEL_FILE [OPTIONS] ``` **Parameters:** - `--model, -m`: Path to the model file (required) - `--preprocessor, -p`: Path to the preprocessor file - `--interactive, -i`: Interactive mode - `--quick`: Quick prediction mode (7 numerical values) - `--batch`: Batch prediction mode (input file) - `--output, -o`: Output file path - `--device`: Computing device - `--verbose, -v`: Verbose output - `--log-level`: Log level **Example:** ```bash # Interactive prediction emotion-prediction predict --model model.pth --interactive # Quick prediction emotion-prediction predict --model model.pth --quick 0.5 0.3 -0.2 75.0 0.1 0.4 -0.1 # Batch prediction emotion-prediction predict --model model.pth --batch input.csv --output results.csv ``` #### Evaluate Command ```bash emotion-prediction evaluate --model MODEL_FILE --data DATA_FILE [OPTIONS] ``` **Parameters:** - `--model, -m`: Path to the model file (required) - `--data, -d`: Path to the test data file (required) - `--preprocessor, -p`: Path to the preprocessor file - `--output, -o`: Path for evaluation results output - `--report`: Path for generating a detailed report file - `--metrics`: List of evaluation metrics (default: mse mae r2) - `--batch-size`: Batch size (default: 32) - `--device`: Computing device - `--verbose, -v`: Verbose output - `--log-level`: Log level **Example:** ```bash # Basic evaluation emotion-prediction evaluate --model model.pth --data test_data.csv # Generate detailed report emotion-prediction evaluate --model model.pth --data test_data.csv --report report.html ``` #### Benchmark Command ```bash emotion-prediction benchmark --model MODEL_FILE [OPTIONS] ``` **Parameters:** - `--model, -m`: Path to the model file (required) - `--preprocessor, -p`: Path to the preprocessor file - `--num-samples`: Number of test samples (default: 1000) - `--batch-size`: Batch size (default: 32) - `--device`: Computing device - `--report`: Path for generating a performance report file - `--warmup`: Number of warmup iterations (default: 10) - `--verbose, -v`: Verbose output - `--log-level`: Log level **Example:** ```bash # Standard benchmarking emotion-prediction benchmark --model model.pth # Custom test parameters emotion-prediction benchmark --model model.pth --num-samples 5000 --batch-size 64 ``` ## Configuration File API ### Model Configuration Model configuration files use YAML format and support the following parameters: ```yaml # Model basic information model_info: name: str # Model name type: str # Model type version: str # Model version # Input/output dimensions dimensions: input_dim: int # Input dimension output_dim: int # Output dimension # Network architecture architecture: hidden_layers: - size: int # Layer size activation: str # Activation function dropout: float # Dropout rate output_layer: activation: str # Output activation function use_batch_norm: bool # Whether to use batch normalization use_layer_norm: bool # Whether to use layer normalization # Initialization parameters initialization: weight_init: str # Weight initialization method bias_init: str # Bias initialization method # Regularization regularization: weight_decay: float # L2 regularization coefficient dropout_config: type: str # Dropout type rate: float # Dropout rate ``` ### Training Configuration Training configuration files support the following parameters: ```yaml # Training information training_info: experiment_name: str # Experiment name description: str # Experiment description seed: int # Random seed # Training hyperparameters training: optimizer: type: str # Optimizer type learning_rate: float # Learning rate weight_decay: float # Weight decay scheduler: type: str # Scheduler type epochs: int # Number of training epochs early_stopping: enabled: bool # Whether to enable early stopping patience: int # Patience value min_delta: float # Minimum improvement ``` ## Exception Handling The project defines the following custom exceptions: ### `ModelLoadError` Model loading error. ### `DataPreprocessingError` Data preprocessing error. ### `InferenceError` Inference process error. ### `ConfigurationError` Configuration file error. **Example:** ```python from src.utils.exceptions import ModelLoadError, InferenceError try: model = PADPredictor.load_model("invalid_model.pth") except ModelLoadError as e: print(f"Model loading failed: {e}") try: result = engine.predict(invalid_input) except InferenceError as e: print(f"Inference failed: {e}") ``` ## Logging System The project uses a structured logging system: ```python from src.utils.logger import setup_logger import logging # Set up logging setup_logger(level='INFO', log_file='training.log') logger = logging.getLogger(__name__) # Use logging logger.info("Training started") logger.debug(f"Batch size: {batch_size}") logger.warning("Potential overfitting detected") logger.error("Error occurred during training") ``` ## Type Hinting The project fully supports type hinting, with detailed type annotations for all public APIs: ```python from typing import Dict, List, Optional, Union, Tuple import numpy as np import torch def predict_emotion( input_data: Union[List[float], np.ndarray], model_path: str, preprocessor_path: Optional[str] = None, device: str = 'auto' ) -> Dict[str, Any]: """ Predicts emotional changes Args: input_data: Input data, 7-dimensional vector model_path: Path to the model file preprocessor_path: Path to the preprocessor file device: Computing device Returns: A dictionary containing prediction results Raises: InferenceError: Raised when inference fails """ pass ``` --- For more details, please refer to the source code and example files. If you have any questions, please check the [Troubleshooting Guide](TUTORIAL.md#troubleshooting) or submit an Issue.