diff --git a/.gitignore b/.gitignore index 57f09af..40451d7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .venv/ .venv310/ .vscode/ +src/__pycache__/ \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..fa87f0f --- /dev/null +++ b/README.md @@ -0,0 +1,193 @@ +# 建筑结构响应预测项目 + +## 项目概述 + +本项目使用时间卷积网络(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来改进项目。 + +## 许可证 + +本项目仅供学习和研究使用。 \ No newline at end of file diff --git a/src/__pycache__/config.cpython-314.pyc b/src/__pycache__/config.cpython-314.pyc index dbe68d8..505fb57 100644 Binary files a/src/__pycache__/config.cpython-314.pyc and b/src/__pycache__/config.cpython-314.pyc differ diff --git a/src/__pycache__/dataset.cpython-314.pyc b/src/__pycache__/dataset.cpython-314.pyc index dcf854c..ac9e1d2 100644 Binary files a/src/__pycache__/dataset.cpython-314.pyc and b/src/__pycache__/dataset.cpython-314.pyc differ diff --git a/src/__pycache__/model.cpython-314.pyc b/src/__pycache__/model.cpython-314.pyc index fc1e465..db0b38a 100644 Binary files a/src/__pycache__/model.cpython-314.pyc and b/src/__pycache__/model.cpython-314.pyc differ