# 建筑结构响应预测项目 ## 项目概述 本项目使用时间卷积网络(Temporal Convolutional Network, TCN)模型来预测建筑结构在地震波和简谐波激励下的响应。模型基于底部传感器的振动数据预测多个传感器的响应,实现结构健康监测和振动控制。 ## 主要特性 - **多输出预测**:基于单个输入传感器预测5个输出传感器的响应 - **时间序列建模**:使用TCN处理序列数据,支持长距离依赖 - **数据增强**:支持有/无TMD(调谐质量阻尼器)条件下的数据训练 - **自动化评估**:提供完整的训练和测试流程 ## 项目结构 ``` Building-main/ ├── src/ │ ├── __init__.py │ ├── config.py # 配置文件,包含模型和训练参数 │ ├── dataset.py # 数据集处理和数据加载器 │ ├── model.py # TCN模型定义 │ ├── train.py # 训练脚本 │ └── evaluate.py # 评估脚本 ├── downloads/ # 数据目录 │ ├── Non_TMD/ # 无TMD数据 │ │ ├── train/ # 训练数据 │ │ ├── val/ # 验证数据 │ │ └── test/ # 测试数据 │ └── TMD/ # 有TMD数据 ├── 数据链接.txt # 数据下载链接配置文件 ├── download_from_data_links.py # 数据下载脚本 ├── best_model.pth # 训练好的模型权重 └── README.md # 项目说明文档 ``` ## 环境要求 - Python 3.8+ - PyTorch 1.9+ - CUDA(可选,用于GPU加速) - 其他依赖:numpy, pandas, scikit-learn, matplotlib ## 安装依赖 1. 创建虚拟环境: ```bash python -m venv .venv310 # Windows .venv310\Scripts\activate # Linux/Mac source .venv310/bin/activate ``` 2. 安装依赖: ```bash pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 pip install numpy pandas scikit-learn matplotlib ``` ## 数据准备 ### 下载数据 运行数据下载脚本从配置文件下载数据: ```bash python download_from_data_links.py ``` 脚本会从 `数据链接.txt` 中读取下载链接,并将数据保存到 `downloads/` 目录。 ### 数据格式 数据为CSV格式的长表结构,包含以下字段: - `code`: 传感器编码 - `type`: 数据类型 - `time`: 时间戳 - `value1`, `value2`, `value3`: 三个轴的振动值 ### 数据集说明 - **Non_TMD**: 无调谐质量阻尼器条件下的数据 - **TMD**: 安装调谐质量阻尼器条件下的数据 - 包含谐波激励(不同频率和振幅)和地震波激励数据 ## 配置说明 主要配置参数在 `src/config.py` 中: - **数据配置**: - `SEQ_LEN`: 序列长度(512) - `STEP_SIZE`: 滑动窗口步长(20) - `BATCH_SIZE`: 批大小(256) - **传感器配置**: - `INPUT_SENSOR`: 输入传感器编码('WSMS00012') - `OUTPUT_SENSORS`: 输出传感器编码列表 - `INPUT_AXIS`: 输入轴('value1' - X轴) - `OUTPUT_AXIS`: 输出轴('value3' - Z轴) - **模型配置**: - `CHANNELS`: TCN各层通道数 [64, 64, 128, 128, 256, 256] - `KERNEL_SIZE`: 卷积核大小(5) - `DROPOUT`: Dropout率(0.2) - **训练配置**: - `LEARNING_RATE`: 学习率(1e-4) - `EPOCHS`: 训练轮数(50) - `WEIGHT_DECAY`: 权重衰减(1e-3) ## 训练模型 ### 基本训练 运行训练脚本: ```bash cd src python train.py ``` 训练过程会: 1. 加载Non_TMD条件下的训练和验证数据 2. 初始化TCN模型 3. 使用AdamW优化器和学习率调度器训练 4. 保存最佳模型到 `best_model.pth` ### 高级训练选项 修改 `src/config.py` 中的参数来自定义训练: - 调整学习率、批大小等超参数 - 启用/禁用早停(`ENABLE_EARLY_STOP`) - 修改模型架构参数 ## 模型评估 运行评估脚本: ```bash cd src python evaluate.py ``` 评估过程会: 1. 加载测试数据 2. 加载训练好的模型权重 3. 对测试数据进行预测 4. 生成可视化结果保存为 `test_results.png` ## 模型架构 ### BuildingTCN - **输入**: (batch_size, seq_len, 1) - 底部传感器X轴数据 - **输出**: (batch_size, seq_len, 5) - 5个传感器的Z轴预测 - **架构**: 多层TCN + 线性输出层 ### TemporalConvNet - 使用膨胀卷积(dilation)实现长距离依赖 - 残差连接保证梯度传播 - 权重归一化提高训练稳定性 ## 使用说明 ### 自定义数据集 1. 将新数据放入 `downloads/Non_TMD/` 或 `downloads/TMD/` 相应子目录 2. 确保数据格式符合要求 3. 修改 `src/config.py` 中的传感器配置(如需要) 4. 重新运行训练脚本 ### 预测新数据 1. 准备输入数据(CSV格式) 2. 修改 `src/dataset.py` 中的数据加载逻辑 3. 使用加载的模型进行推理 ## 注意事项 - 确保数据目录结构正确 - GPU内存不足时可适当减小 `BATCH_SIZE` - 模型收敛可能需要调整学习率 - 测试数据可视化仅显示第一个batch的第一条序列 ## 贡献 欢迎提交Issue和Pull Request来改进项目。 ## 许可证 本项目仅供学习和研究使用。