| # 情绪与生理状态变化预测模型 - 完整使用教程 |
|
|
| ## 目录 |
|
|
| 1. [项目概述](#项目概述) |
| 2. [安装指南](#安装指南) |
| 3. [快速开始](#快速开始) |
| 4. [数据准备](#数据准备) |
| 5. [模型训练](#模型训练) |
| 6. [模型推理](#模型推理) |
| 7. [配置文件](#配置文件) |
| 8. [命令行工具](#命令行工具) |
| 9. [常见问题](#常见问题) |
| 10. [故障排除](#故障排除) |
|
|
| ## 项目概述 |
|
|
| 本项目是一个基于深度学习的情绪与生理状态变化预测模型,使用多层感知机(MLP)来预测用户情绪和生理状态的变化。 |
|
|
| ### 核心功能 |
| - **输入**: 7维特征(User PAD 3维 + Vitality 1维 + Current PAD 3维) |
| - **输出**: 3维预测(ΔPAD:ΔPleasure, ΔArousal, ΔDominance) |
| - **模型**: 多层感知机(MLP)架构 |
| - **支持**: 训练、推理、评估、性能基准测试 |
|
|
| ### 技术栈 |
| - **深度学习框架**: PyTorch |
| - **数据处理**: NumPy, Pandas |
| - **可视化**: Matplotlib, Seaborn |
| - **配置管理**: YAML |
| - **命令行界面**: argparse |
|
|
| ## 安装指南 |
|
|
| ### 系统要求 |
| - Python 3.8 或更高版本 |
| - CUDA支持(可选,用于GPU加速) |
|
|
| ### 安装步骤 |
|
|
| 1. **克隆项目** |
| ```bash |
| git clone <repository-url> |
| cd ann-playground |
| ``` |
|
|
| 2. **创建虚拟环境** |
| ```bash |
| python -m venv venv |
| source venv/bin/activate # Linux/Mac |
| # 或 |
| venv\Scripts\activate # Windows |
| ``` |
|
|
| 3. **安装依赖** |
| ```bash |
| pip install -r requirements.txt |
| ``` |
|
|
| 4. **验证安装** |
| ```bash |
| python -c "import torch; print('PyTorch version:', torch.__version__)" |
| python -c "from src.models.pad_predictor import PADPredictor; print('Model import successful')" |
| ``` |
|
|
| ### 依赖包说明 |
|
|
| 核心依赖: |
| - `torch`: 深度学习框架 |
| - `numpy`: 数值计算 |
| - `pandas`: 数据处理 |
| - `matplotlib`, `seaborn`: 数据可视化 |
| - `scikit-learn`: 机器学习工具 |
| - `loguru`: 日志记录 |
| - `pyyaml`: 配置文件解析 |
| - `scipy`: 科学计算 |
|
|
| ## 快速开始 |
|
|
| ### 1. 运行快速开始教程 |
|
|
| 最简单的方式是运行快速开始教程: |
|
|
| ```bash |
| cd examples |
| python quick_start.py |
| ``` |
|
|
| 这将自动完成: |
| - 生成合成训练数据 |
| - 训练一个基础模型 |
| - 进行推理预测 |
| - 解释预测结果 |
|
|
| ### 2. 使用预训练模型 |
|
|
| 如果你有预训练的模型文件,可以直接进行推理: |
|
|
| ```python |
| from src.utils.inference_engine import create_inference_engine |
| |
| # 创建推理引擎 |
| engine = create_inference_engine( |
| model_path="path/to/model.pth", |
| preprocessor_path="path/to/preprocessor.pkl" |
| ) |
| |
| # 进行预测 |
| input_data = [0.5, 0.3, -0.2, 75.0, 0.1, 0.4, -0.1] |
| result = engine.predict(input_data) |
| print(result) |
| ``` |
|
|
| ### 3. 使用命令行工具 |
|
|
| 项目提供了完整的命令行工具: |
|
|
| ```bash |
| # 训练模型 |
| python -m src.cli.main train --config configs/training_config.yaml |
| |
| # 进行预测 |
| python -m src.cli.main predict --model model.pth --quick 0.5 0.3 -0.2 75.0 0.1 0.4 -0.1 |
| |
| # 评估模型 |
| python -m src.cli.main evaluate --model model.pth --data test_data.csv |
| |
| # 推理脚本 |
| python -m src.cli.main inference --model model.pth --input-cli 0.5 0.3 -0.2 75.0 0.1 0.4 -0.1 |
| |
| # 性能基准测试 |
| python -m src.cli.main benchmark --model model.pth --num-samples 1000 |
| ``` |
|
|
| ## 数据准备 |
|
|
| ### 数据格式 |
|
|
| #### 输入特征(7维) |
| | 特征名 | 类型 | 范围 | 说明 | |
| |--------|------|------|------| |
| | user_pleasure | float | [-1, 1] | 用户快乐度 | |
| | user_arousal | float | [-1, 1] | 用户激活度 | |
| | user_dominance | float | [-1, 1] | 用户支配度 | |
| | vitality | float | [0, 100] | 活力水平 | |
| | current_pleasure | float | [-1, 1] | 当前快乐度 | |
| | current_arousal | float | [-1, 1] | 当前激活度 | |
| | current_dominance | float | [-1, 1] | 当前支配度 | |
|
|
| #### 输出标签(3维) |
| | 标签名 | 类型 | 范围 | 说明 | |
| |--------|------|------|------| |
| | delta_pleasure | float | [-0.5, 0.5] | 快乐度变化量 | |
| | delta_arousal | float | [-0.5, 0.5] | 激活度变化量 | |
| | delta_dominance | float | [-0.5, 0.5] | 支配度变化量 | |
| | delta_pressure | float | [-0.3, 0.3] | 压力变化量 | |
| | confidence | float | [0, 1] | 预测置信度 | |
|
|
| ### 数据文件格式 |
|
|
| #### CSV格式 |
| ```csv |
| user_pleasure,user_arousal,user_dominance,vitality,current_pleasure,current_arousal,current_dominance,delta_pleasure,delta_arousal,delta_dominance,delta_pressure,confidence |
| 0.5,0.3,-0.2,80.0,0.1,0.4,-0.1,-0.05,0.02,0.03,-0.02,0.85 |
| -0.3,0.6,0.2,45.0,-0.1,0.7,0.1,0.08,-0.03,-0.01,0.05,0.72 |
| ... |
| ``` |
|
|
| #### JSON格式 |
| ```json |
| [ |
| { |
| "user_pleasure": 0.5, |
| "user_arousal": 0.3, |
| "user_dominance": -0.2, |
| "vitality": 80.0, |
| "current_pleasure": 0.1, |
| "current_arousal": 0.4, |
| "current_dominance": -0.1, |
| "delta_pleasure": -0.05, |
| "delta_arousal": 0.02, |
| "delta_dominance": 0.03, |
| "delta_pressure": -0.02, |
| "confidence": 0.85 |
| }, |
| ... |
| ] |
| ``` |
|
|
| ### 合成数据生成 |
|
|
| 项目提供了合成数据生成器: |
|
|
| ```python |
| from src.data.synthetic_generator import SyntheticDataGenerator |
| |
| # 创建数据生成器 |
| generator = SyntheticDataGenerator(num_samples=1000, seed=42) |
| |
| # 生成数据 |
| features, labels = generator.generate_data() |
| |
| # 保存数据 |
| generator.save_data(features, labels, "output_data.csv", format='csv') |
| ``` |
|
|
| ### 数据预处理 |
|
|
| ```python |
| from src.data.preprocessor import DataPreprocessor |
| |
| # 创建预处理器 |
| preprocessor = DataPreprocessor() |
| |
| # 拟合预处理器 |
| preprocessor.fit(train_features, train_labels) |
| |
| # 转换数据 |
| processed_features, processed_labels = preprocessor.transform(features, labels) |
| |
| # 保存预处理器 |
| preprocessor.save("preprocessor.pkl") |
| ``` |
|
|
| ## 模型训练 |
|
|
| ### 基础训练 |
|
|
| ```python |
| from src.models.pad_predictor import PADPredictor |
| from src.utils.trainer import ModelTrainer |
| from torch.utils.data import DataLoader, TensorDataset |
| |
| # 创建模型 |
| model = PADPredictor( |
| input_dim=7, |
| output_dim=3, |
| hidden_dims=[128, 64, 32], |
| dropout_rate=0.3 |
| ) |
| |
| # 创建数据加载器 |
| dataset = TensorDataset( |
| torch.FloatTensor(processed_features), |
| torch.FloatTensor(processed_labels) |
| ) |
| train_loader = DataLoader(dataset, batch_size=32, shuffle=True) |
| |
| # 创建训练器 |
| trainer = ModelTrainer(model, preprocessor) |
| |
| # 训练配置 |
| config = { |
| 'epochs': 100, |
| 'learning_rate': 0.001, |
| 'weight_decay': 1e-4, |
| 'patience': 10, |
| 'save_dir': './models' |
| } |
| |
| # 开始训练 |
| history = trainer.train(train_loader, val_loader, config) |
| ``` |
|
|
| ### 使用配置文件训练 |
|
|
| 创建训练配置文件 `my_training_config.yaml`: |
|
|
| ```yaml |
| training: |
| epochs: 100 |
| learning_rate: 0.001 |
| weight_decay: 0.0001 |
| batch_size: 32 |
| |
| optimizer: |
| type: "Adam" |
| lr: 0.001 |
| weight_decay: 0.0001 |
| |
| scheduler: |
| type: "ReduceLROnPlateau" |
| patience: 5 |
| factor: 0.5 |
| |
| early_stopping: |
| patience: 10 |
| min_delta: 0.001 |
| |
| data: |
| train_ratio: 0.8 |
| val_ratio: 0.1 |
| test_ratio: 0.1 |
| shuffle: True |
| seed: 42 |
| ``` |
|
|
| 运行训练: |
|
|
| ```bash |
| python -m src.cli.main train --config my_training_config.yaml |
| ``` |
|
|
| ### 训练监控 |
|
|
| 训练过程中会自动保存: |
| - 最佳模型检查点 |
| - 训练历史记录 |
| - 验证指标 |
| - 学习率变化 |
|
|
| 可视化训练过程: |
|
|
| ```python |
| import matplotlib.pyplot as plt |
| |
| # 绘制损失曲线 |
| plt.figure(figsize=(10, 6)) |
| plt.plot(history['train_loss'], label='Training Loss') |
| plt.plot(history['val_loss'], label='Validation Loss') |
| plt.xlabel('Epoch') |
| plt.ylabel('Loss') |
| plt.legend() |
| plt.show() |
| ``` |
|
|
| ### 模型评估 |
|
|
| ```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}") |
| ``` |
|
|
| ## 模型推理 |
|
|
| ### 单样本推理 |
|
|
| ```python |
| from src.utils.inference_engine import create_inference_engine |
| |
| # 创建推理引擎 |
| engine = create_inference_engine( |
| model_path="models/best_model.pth", |
| preprocessor_path="models/preprocessor.pkl" |
| ) |
| |
| # 单样本预测 |
| 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"ΔPressure: {result['delta_pressure']}") |
| print(f"Confidence: {result['confidence']}") |
| ``` |
|
|
| ### 批量推理 |
|
|
| ```python |
| # 批量预测 |
| batch_inputs = [ |
| [0.5, 0.3, -0.2, 75.0, 0.1, 0.4, -0.1], |
| [-0.3, 0.6, 0.2, 45.0, -0.1, 0.7, 0.1], |
| [0.8, -0.4, 0.6, 90.0, 0.7, -0.3, 0.5] |
| ] |
| |
| batch_results = engine.predict_batch(batch_inputs) |
| |
| for i, result in enumerate(batch_results): |
| print(f"Sample {i+1}: {result}") |
| ``` |
|
|
| ### 从文件推理 |
|
|
| ```python |
| import pandas as pd |
| |
| # 从CSV文件读取输入 |
| input_df = pd.read_csv('input_data.csv') |
| results = engine.predict_batch(input_df.values.tolist()) |
| |
| # 保存结果 |
| output_df = pd.DataFrame(results) |
| output_df.to_csv('output_results.csv', index=False) |
| ``` |
|
|
| ### 性能优化 |
|
|
| ```python |
| # 预热模型(提高首次推理速度) |
| for _ in range(5): |
| engine.predict([0.5, 0.3, -0.2, 75.0, 0.1, 0.4, -0.1]) |
| |
| # 性能基准测试 |
| 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") |
| ``` |
|
|
| ## 配置文件 |
|
|
| ### 模型配置 (`configs/model_config.yaml`) |
| |
| ```yaml |
| # 模型基本信息 |
| model_info: |
| name: "MLP_Emotion_Predictor" |
| type: "MLP" |
| version: "1.0" |
|
|
| # 输入输出维度 |
| dimensions: |
| input_dim: 7 |
| output_dim: 3 |
|
|
| # 网络架构参数 |
| architecture: |
| hidden_layers: |
| - size: 128 |
| activation: "ReLU" |
| dropout: 0.2 |
| - size: 64 |
| activation: "ReLU" |
| dropout: 0.2 |
| - size: 32 |
| activation: "ReLU" |
| dropout: 0.1 |
| |
| output_layer: |
| activation: "Linear" |
| |
| # 初始化参数 |
| initialization: |
| weight_init: "xavier_uniform" |
| bias_init: "zeros" |
| |
| # 正则化参数 |
| regularization: |
| weight_decay: 0.0001 |
| dropout_config: |
| type: "standard" |
| rate: 0.2 |
| ``` |
| |
| ### 训练配置 (`configs/training_config.yaml`) |
|
|
| ```yaml |
| # 训练参数 |
| training: |
| epochs: 100 |
| learning_rate: 0.001 |
| weight_decay: 0.0001 |
| batch_size: 32 |
| seed: 42 |
| |
| # 优化器配置 |
| optimizer: |
| type: "Adam" |
| lr: 0.001 |
| weight_decay: 0.0001 |
| betas: [0.9, 0.999] |
| |
| # 学习率调度器 |
| scheduler: |
| type: "ReduceLROnPlateau" |
| patience: 5 |
| factor: 0.5 |
| min_lr: 1e-6 |
| |
| # 早停配置 |
| early_stopping: |
| patience: 10 |
| min_delta: 0.001 |
| monitor: "val_loss" |
| |
| # 数据配置 |
| data: |
| train_ratio: 0.8 |
| val_ratio: 0.1 |
| test_ratio: 0.1 |
| shuffle: True |
| num_workers: 4 |
| |
| # 保存配置 |
| saving: |
| save_dir: "./outputs" |
| save_best_only: True |
| checkpoint_interval: 10 |
| ``` |
|
|
| ### 数据配置 (`configs/data_config.yaml`) |
| |
| ```yaml |
| # 数据路径配置 |
| paths: |
| train_data: "data/train.csv" |
| val_data: "data/val.csv" |
| test_data: "data/test.csv" |
|
|
| # 数据预处理配置 |
| preprocessing: |
| normalize_features: True |
| normalize_labels: True |
| feature_scaler: "standard" # standard, minmax, robust |
| label_scaler: "standard" |
|
|
| # 数据增强配置 |
| augmentation: |
| enabled: False |
| noise_std: 0.01 |
| augmentation_factor: 2 |
|
|
| # 合成数据配置 |
| synthetic_data: |
| num_samples: 1000 |
| seed: 42 |
| add_noise: True |
| add_correlations: True |
| ``` |
| |
| ## 命令行工具 |
| |
| ### 训练命令 |
| |
| ```bash |
| # 基础训练 |
| python -m src.cli.main train --config configs/training_config.yaml |
| |
| # 指定输出目录 |
| python -m src.cli.main train --config configs/training_config.yaml --output-dir ./my_models |
| |
| # 使用GPU训练 |
| python -m src.cli.main train --config configs/training_config.yaml --device cuda |
|
|
| # 从检查点恢复训练 |
| python -m src.cli.main train --config configs/training_config.yaml --resume checkpoints/epoch_50.pth |
|
|
| # 覆盖配置参数 |
| python -m src.cli.main train --config configs/training_config.yaml --epochs 200 --batch-size 64 --learning-rate 0.0005 |
| ``` |
| |
| ### 预测命令 |
| |
| ```bash |
| # 交互式预测 |
| python -m src.cli.main predict --model model.pth --interactive |
| |
| # 快速预测 |
| python -m src.cli.main predict --model model.pth --quick 0.5 0.3 -0.2 75.0 0.1 0.4 -0.1 |
| |
| # 批量预测 |
| python -m src.cli.main predict --model model.pth --batch input.csv --output results.csv |
| |
| # 指定预处理器 |
| python -m src.cli.main predict --model model.pth --preprocessor preprocessor.pkl --quick 0.5 0.3 -0.2 75.0 0.1 0.4 -0.1 |
| ``` |
| |
| ### 评估命令 |
| |
| ```bash |
| # 基础评估 |
| python -m src.cli.main evaluate --model model.pth --data test_data.csv |
|
|
| # 生成详细报告 |
| python -m src.cli.main evaluate --model model.pth --data test_data.csv --report evaluation_report.html |
|
|
| # 指定评估指标 |
| python -m src.cli.main evaluate --model model.pth --data test_data.csv --metrics mse mae r2 |
| |
| # 自定义批次大小 |
| python -m src.cli.main evaluate --model model.pth --data test_data.csv --batch-size 64 |
| ``` |
| |
| ### 推理命令 |
| |
| ```bash |
| # 命令行输入推理 |
| python -m src.cli.main inference --model model.pth --input-cli 0.5 0.3 -0.2 75.0 0.1 0.4 -0.1 |
|
|
| # JSON文件推理 |
| python -m src.cli.main inference --model model.pth --input-json input.json --output-json output.json |
|
|
| # CSV文件推理 |
| python -m src.cli.main inference --model model.pth --input-csv input.csv --output-csv output.csv |
|
|
| # 基准测试 |
| python -m src.cli.main inference --model model.pth --benchmark --num-samples 1000 |
|
|
| # 静默模式 |
| python -m src.cli.main inference --model model.pth --input-cli 0.5 0.3 -0.2 75.0 0.1 0.4 -0.1 --quiet |
| ``` |
| |
| ### 基准测试命令 |
| |
| ```bash |
| # 标准基准测试 |
| python -m src.cli.main benchmark --model model.pth |
|
|
| # 自定义测试参数 |
| python -m src.cli.main benchmark --model model.pth --num-samples 5000 --batch-size 64 |
|
|
| # 生成性能报告 |
| python -m src.cli.main benchmark --model model.pth --report performance_report.json |
| |
| # 详细输出 |
| python -m src.cli.main benchmark --model model.pth --verbose |
| ``` |
| |
| ## 常见问题 |
| |
| ### Q1: 如何处理缺失值? |
| A: 项目目前不支持缺失值处理。请在数据预处理阶段使用以下方法: |
| ```python |
| # 删除包含缺失值的行 |
| df = df.dropna() |
| |
| # 或填充缺失值 |
| df = df.fillna(df.mean()) # 用均值填充 |
| df = df.fillna(0) # 用0填充 |
| ``` |
| |
| ### Q2: 如何自定义模型架构? |
| A: 有两种方式自定义模型架构: |
| |
| **方式1:修改配置文件** |
| ```yaml |
| # 在 model_config.yaml 中修改 |
| architecture: |
| hidden_layers: |
| - size: 256 # 增加神经元数量 |
| activation: "ReLU" |
| dropout: 0.3 |
| - size: 128 |
| activation: "ReLU" |
| dropout: 0.2 |
| - size: 64 |
| activation: "ReLU" |
| dropout: 0.1 |
| ``` |
| |
| **方式2:直接创建模型** |
| ```python |
| from src.models.pad_predictor import PADPredictor |
|
|
| model = PADPredictor( |
| input_dim=7, |
| output_dim=3, |
| hidden_dims=[256, 128, 64, 32], # 自定义隐藏层 |
| dropout_rate=0.3 |
| ) |
| ``` |
| |
| ### Q3: 如何处理类别特征? |
| A: 当前版本只支持数值特征。如果有类别特征,需要先进行编码: |
| ```python |
| # One-Hot编码 |
| df_encoded = pd.get_dummies(df, columns=['category_column']) |
| |
| # 或标签编码 |
| from sklearn.preprocessing import LabelEncoder |
| le = LabelEncoder() |
| df['category_encoded'] = le.fit_transform(df['category_column']) |
| ``` |
|
|
| ### Q4: 如何提高模型性能? |
| A: 尝试以下方法: |
| 1. **增加训练数据量** |
| 2. **调整模型架构**(增加层数或神经元数量) |
| 3. **优化超参数**(学习率、批次大小等) |
| 4. **数据增强**(添加噪声或合成数据) |
| 5. **正则化**(调整dropout、weight_decay) |
| 6. **早停**(防止过拟合) |
| |
| ### Q5: 如何部署模型到生产环境? |
| A: 推荐的部署方式: |
| 1. **保存模型和预处理器** |
| 2. **创建推理服务** |
| 3. **使用FastAPI或Flask封装** |
| 4. **容器化部署** |
| |
| 示例: |
| ```python |
| from fastapi import FastAPI |
| from src.utils.inference_engine import create_inference_engine |
|
|
| app = FastAPI() |
| engine = create_inference_engine("model.pth", "preprocessor.pkl") |
|
|
| @app.post("/predict") |
| async def predict(input_data: list): |
| result = engine.predict(input_data) |
| return result |
| ``` |
| |
| ### Q6: 如何处理大规模数据? |
| A: 对于大规模数据: |
| 1. **使用数据生成器**(DataGenerator) |
| 2. **分批处理** |
| 3. **使用多进程数据加载** |
| 4. **考虑使用分布式训练** |
|
|
| ```python |
| # 使用多进程数据加载 |
| train_loader = DataLoader( |
| dataset, |
| batch_size=32, |
| shuffle=True, |
| num_workers=4, # 多进程 |
| pin_memory=True # GPU内存优化 |
| ) |
| ``` |
|
|
| ### Q7: 如何可视化预测结果? |
| A: 项目提供了多种可视化方法: |
| ```python |
| import matplotlib.pyplot as plt |
| import seaborn as sns |
| |
| # 预测值vs真实值散点图 |
| plt.scatter(true_labels, predictions, alpha=0.6) |
| plt.plot([min_val, max_val], [min_val, max_val], 'r--') |
| plt.xlabel('True Values') |
| plt.ylabel('Predictions') |
| plt.show() |
| |
| # 残差图 |
| residuals = true_labels - predictions |
| plt.hist(residuals, bins=30) |
| plt.xlabel('Residuals') |
| plt.ylabel('Frequency') |
| plt.show() |
| ``` |
|
|
| ### Q8: 如何进行模型版本管理? |
| A: 建议的版本管理策略: |
| 1. **使用语义化版本号** |
| 2. **保存训练配置和超参数** |
| 3. **记录模型性能指标** |
| 4. **使用模型注册表** |
|
|
| ```python |
| # 保存模型信息 |
| model_info = { |
| 'version': '1.2.0', |
| 'architecture': str(model), |
| 'training_config': config, |
| 'performance': metrics, |
| 'created_at': datetime.now().isoformat() |
| } |
| |
| torch.save({ |
| 'model_state_dict': model.state_dict(), |
| 'model_info': model_info |
| }, f'model_v{model_info["version"]}.pth') |
| ``` |
|
|
| ## 故障排除 |
|
|
| ### 常见错误及解决方案 |
|
|
| #### 1. CUDA内存不足 |
| ``` |
| RuntimeError: CUDA out of memory |
| ``` |
| **解决方案**: |
| - 减小批次大小 |
| - 使用CPU训练:`--device cpu` |
| - 清理GPU缓存:`torch.cuda.empty_cache()` |
|
|
| #### 2. 模型加载失败 |
| ``` |
| FileNotFoundError: [Errno 2] No such file or directory: 'model.pth' |
| ``` |
| **解决方案**: |
| - 检查文件路径是否正确 |
| - 确保模型文件存在 |
| - 检查文件权限 |
|
|
| #### 3. 数据维度不匹配 |
| ``` |
| RuntimeError: mat1 and mat2 shapes cannot be multiplied |
| ``` |
| **解决方案**: |
| - 检查输入数据维度(应为7维) |
| - 确保数据预处理正确 |
| - 验证模型配置 |
|
|
| #### 4. 导入错误 |
| ``` |
| ModuleNotFoundError: No module named 'src.xxx' |
| ``` |
| **解决方案**: |
| - 检查Python路径设置 |
| - 确保在项目根目录运行 |
| - 重新安装依赖包 |
|
|
| #### 5. 配置文件错误 |
| ``` |
| yaml.scanner.ScannerError: while scanning for the next token |
| ``` |
| **解决方案**: |
| - 检查YAML文件语法 |
| - 确保缩进正确 |
| - 使用YAML验证工具 |
|
|
| ### 调试技巧 |
|
|
| #### 1. 启用详细日志 |
| ```bash |
| python -m src.cli.main train --config configs/training_config.yaml --verbose --log-level DEBUG |
| ``` |
|
|
| #### 2. 使用小数据集测试 |
| ```python |
| # 使用少量数据快速测试 |
| generator = SyntheticDataGenerator(num_samples=100, seed=42) |
| features, labels = generator.generate_data() |
| ``` |
|
|
| #### 3. 检查模型输出 |
| ```python |
| # 检查模型输出形状 |
| model.eval() |
| with torch.no_grad(): |
| sample_input = torch.randn(1, 7) |
| output = model(sample_input) |
| print(f"Output shape: {output.shape}") |
| print(f"Output range: [{output.min():.3f}, {output.max():.3f}]") |
| ``` |
|
|
| #### 4. 验证数据预处理 |
| ```python |
| # 检查预处理后的数据 |
| print(f"Features mean: {processed_features.mean(axis=0)}") |
| print(f"Features std: {processed_features.std(axis=0)}") |
| print(f"Labels mean: {processed_labels.mean(axis=0)}") |
| print(f"Labels std: {processed_labels.std(axis=0)}") |
| ``` |
|
|
| ### 性能优化建议 |
|
|
| #### 1. 训练优化 |
| - 使用合适的批次大小 |
| - 启用混合精度训练(AMP) |
| - 使用学习率调度器 |
| - 实施早停机制 |
|
|
| #### 2. 推理优化 |
| - 模型预热 |
| - 批量推理 |
| - 模型量化 |
| - 使用ONNX格式 |
|
|
| #### 3. 内存优化 |
| - 使用数据生成器 |
| - 及时释放不需要的变量 |
| - 使用梯度累积 |
|
|
| --- |
|
|
| ## 联系方式 |
|
|
| 如有其他问题或需要帮助,请通过以下方式联系: |
| - 项目仓库: [GitHub仓库链接] |
| - 问题反馈: [Issues链接] |
| - 文档: [文档链接] |
| - 邮箱: [联系邮箱] |
|
|
| --- |
|
|
| **注意**: 本教程基于项目当前版本编写,随着项目更新,部分内容可能会有变化。请及时查看最新文档。 |