Deeplearning/README.md

209 lines
4.9 KiB
Markdown
Raw 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.

# Deeplearning 使用说明
## 1. 项目约定
### 1.1 输入数据格式
每一类数据建议保存为 `xlsx/xls`。读取时默认取偶数列(索引 1,3,5...)作为特征,奇数列内容可忽略。
示意:
| 任意值 | 特征值 | 任意值 | 特征值 |
|---|---|---|---|
| arbitrary value | value | arbitrary value | value |
| arbitrary value | value | arbitrary value | value |
### 1.2 目录约定
训练数据放在 `Static/`,输出结果放在 `Result/`
推荐目录:
```text
.
├─ Static/
│ └─ 20241009MaterialDiv/
└─ Result/
```
## 2. Conda 环境迁移
环境文件在 `conda_env/`
- `conda_env/environment.portable.yml`:通用迁移(推荐)
- `conda_env/environment.lock.txt`:精确锁定(同系统/同架构优先)
- `conda_env/env.yml`:历史文件
### 2.1 创建环境
```bash
# 方式1推荐通用创建
conda env create -f conda_env/environment.portable.yml
conda activate Deeplearning
# 方式2精确复现
conda create -n Deeplearning --file conda_env/environment.lock.txt
conda activate Deeplearning
# 验证
python -V
python -c "import torch; print(torch.__version__)"
```
### 2.2 同名环境已存在时
```bash
# 方式A保留旧环境改名创建
conda env create -f conda_env/environment.portable.yml -n Deeplearning_v2
conda activate Deeplearning_v2
# 或者lock 方式)
conda create -n Deeplearning_v2 --file conda_env/environment.lock.txt
conda activate Deeplearning_v2
```
```bash
# 方式B删除旧环境后重建谨慎
conda env remove -n Deeplearning
conda env create -f conda_env/environment.portable.yml
conda activate Deeplearning
```
### 2.3 重新导出环境
```bash
conda env export -n Deeplearning --no-builds > conda_env/environment.portable.yml
conda list -n Deeplearning --explicit > conda_env/environment.lock.txt
```
## 3. 快速开始
### 3.1 准备数据
1. 将数据目录命名为 `日期+项目名`,例如 `20241009MaterialDiv`
2. 准备 `label_names`(建议英文或数字)。
3. 将数据目录放入 `Static/`
### 3.2 数据目录模板
单文件模式(`isDir=False`
```text
Static/
20241009MaterialDiv/
Acrlic.xlsx
Ecoflex.xlsx
PDMS.xlsx
PLA.xlsx
Wood.xlsx
```
多子特征模式(`isDir=True`
```text
Static/
20241009MaterialDiv/
Acrlic/
sample_01.xlsx
sample_02.xlsx
Ecoflex/
sample_01.xlsx
sample_02.xlsx
PDMS/
sample_01.xlsx
sample_02.xlsx
PLA/
sample_01.xlsx
sample_02.xlsx
Wood/
sample_01.xlsx
sample_02.xlsx
```
命名规则(重要):
- `label_names` 中每一项必须与文件名(`isDir=False`)或子文件夹名(`isDir=True`)完全一致(区分大小写)。
- `label_names` 顺序就是标签编码顺序,训练结果和混淆矩阵按该顺序展示。
示例:
```python
label_names = ['Acrlic', 'Ecoflex', 'PDMS', 'PLA', 'Wood']
```
对应关系:
```text
Acrlic <-> Acrlic.xlsx 或 Acrlic/
Ecoflex <-> Ecoflex.xlsx 或 Ecoflex/
PDMS <-> PDMS.xlsx 或 PDMS/
PLA <-> PLA.xlsx 或 PLA/
Wood <-> Wood.xlsx 或 Wood/
```
### 3.3 训练示例
```python
from Qtorch.Models.Qmlp import Qmlp
from Qfunctions.divSet import divSet
from Qfunctions.loaData import load_data
from Qfunctions.saveToxlsx import save_to_xlsx
projet_name = '20241009MaterialDiv'
label_names = ['Acrlic', 'Ecoflex', 'PDMS', 'PLA', 'Wood']
# 读取数据
data = load_data(projet_name, label_names, isDir=False, fileClass='xlsx')
# 划分训练/测试集
X_train, X_test, y_train, y_test, encoder = divSet(
data=data,
labels=label_names,
test_size=0.3
)
# 构建模型
model = Qmlp(
X_train=X_train,
X_test=X_test,
y_train=y_train,
y_test=y_test,
hidden_layers=[128],
dropout_rate=0
)
# 训练与导出结果
pca_2d, pca_3d = model.get_PCA()
model.fit(300)
cm = model.get_cm()
cmn = model.get_cmn()
epoch_data = model.get_epoch_data()
save_to_xlsx(project_name=projet_name, file_name='pca_2d', data=pca_2d)
save_to_xlsx(project_name=projet_name, file_name='pca_3d', data=pca_3d)
save_to_xlsx(project_name=projet_name, file_name='cm', data=cm)
save_to_xlsx(project_name=projet_name, file_name='cmn', data=cmn)
save_to_xlsx(project_name=projet_name, file_name='acc_and_loss', data=epoch_data)
```
## 4. load_data 参数说明
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| folder | str | 必填 | `Static/` 下的数据目录名 |
| labelNames | list | 必填 | 类别名称列表,用于读取和排序标签 |
| isDir | bool | True | `False` 对应单文件模式,`True` 对应多子特征模式 |
| fileClass | str | xlsx | 数据文件后缀 |
读取路径规则:
- 单文件模式:`./Static/folder/labelNames[i].xlsx`
- 多子特征模式:`./Static/folder/labelNames[i]/*.xlsx`
## 5. 常见问题
### 5.1 找不到文件
优先检查:
- `label_names` 与文件/文件夹是否同名
- `isDir` 是否与目录结构匹配
- 文件后缀是否与 `fileClass` 一致