| # 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 <command> [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. |