From c82f61a4b3cd809ec1a94c1f13493bbbe7c0908a Mon Sep 17 00:00:00 2001 From: CrbnsCat10n Date: Thu, 30 Apr 2026 15:29:56 +0800 Subject: [PATCH] modified: .gitignore new file: README.md --- .gitignore | 1 + README.md | 193 ++++++++++++++++++++++++ src/__pycache__/config.cpython-314.pyc | Bin 836 -> 1047 bytes src/__pycache__/dataset.cpython-314.pyc | Bin 6996 -> 11996 bytes src/__pycache__/model.cpython-314.pyc | Bin 6019 -> 5982 bytes 5 files changed, 194 insertions(+) create mode 100644 README.md 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 dbe68d87f74fffddca39b5ca0548a9bf720164ee..505fb57ca6e43f72c320da467b1696e32bb60288 100644 GIT binary patch delta 501 zcmX@YHl2e{n~#@^0SIP2_>?(`c_N<#lM~}ajotNp{){DDL2M=5LF^?wdJIAQKt69A zYYATvM+turXNf?ZQHfv>SBX#%cZqNue~CyOLlC2=H`A&3{mP-f5+m@LMqW`2vUEHS4v)euS>r_Y)R0w?X$b)98i zKQfcDPye&><0apu0DHGvEXk!QiMN=O3rZ))GFmCJy>tNDQN#}Hi7~vUwi`zdm1j?B#!Q@^q=<4U_KNn`86Oah>KSPi4V+-jEuJ#I47TA^5(z6E84(ygHNo1 z`x6@jkH%yPW?91%v+Wg|)5=>s%7n=@4sT N+o0OSR-^?q5dg7ufL8zj delta 279 zcmbQvafFRen~#@^0SKJ;e#%_WG?7n&=@r97jorpv{){DDdJI9_K$<&_xr8T(t%Ns- zy@W5$sDwX=qeLK%A&AjautYG3vqUI}QJF!LXL25+nqvB_nILe|KK;+ikC%Lt0_@Xu zon>A>GLy2u#gbf_k~sM^qm?+zO9!BxFB^bF5if{f0TPLYH@Z+enE^=X=YAJW?s5(ZenI$ zOmR_iOmco+T4uUlLFFwDo80`A(wtPgA{C$!j6hsmKRJatjP(;61CRXVlgzUGpV=4~ Od2ev?H?b8d0p$TxX;QWT diff --git a/src/__pycache__/dataset.cpython-314.pyc b/src/__pycache__/dataset.cpython-314.pyc index dcf854cc8cb9079d27ef6799484a035c4c87460f..ac9e1d2e03793f4ab19cea95cb7c2b2f960c0d17 100644 GIT binary patch literal 11996 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 m3zN#%(ajfs(Gvkp_ZC;%dA1JM8g delta 51 zcmcbo*Q~#RjY-Wg*(xTqIJKxa#49