Files
Building/README.md
CrbnsCat10n c82f61a4b3 modified: .gitignore
new file:   README.md
2026-04-30 15:29:56 +08:00

193 lines
5.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 建筑结构响应预测项目
## 项目概述
本项目使用时间卷积网络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来改进项目。
## 许可证
本项目仅供学习和研究使用。