CNN-RNN 通用分类 Python 试用版

试用版功能限制：
- 最多处理100条样本，超限直接停止，不会截断后继续训练。
- 最多两层卷积，rnnHidden最大64，rnnLayers固定1，maxEpochs最大30。
- 试用版开放LSTM和GRU；RNN及各种双向循环结构在完整版开放。
- 五张结果图均带“试用版@khsci.com/docs”中央水印。

一、运行环境

试用版 .pyd 按 Windows 64位 Python 3.11 编译，必须使用 Python 3.11 x64。主要依赖为 NumPy、Matplotlib、scikit-learn 和 PyTorch，执行：
pip install -r requirements.txt

如果使用其他Python大版本，可能出现“找不到模块”或无法加载.pyd；请切换到Python 3.11环境。

二、程序文件

1. demoCNNRNNClassIris.py：一维数组分类，输入为[样本数, 特征长度]。
2. demoCNNRNNClassHAR.py：多通道传感器序列分类，输入为[样本数, 通道数, 时间长度]，按受试者隔离训练、验证和测试。
3. demoCNNRNNClassMNIST.py：二维灰度图分类，输入为[样本数, 高度, 宽度]。试用数据演示数字0/1/2三分类，完整函数可处理更多类别。
4. FunClassCNNRNN.py：核心函数，完成输入适配、分层划分、训练集标准化、CNN-RNN搭建、训练、早停、预测、评价和绘图。
5. EvaClassEffect.py：计算 Accuracy、宏平均 Precision/Recall/F1、逐类别指标和混淆矩阵。

三、快速开始

任选一个 demo 直接运行。核心调用只有一行：

foreData, foreDataTrain, model, info = FunClassCNNRNN(X, Y, options)

图窗默认弹出，五张PNG同时保存到 figure 文件夹。替换自己的数据时，复制一个形状相近的 demo，修改 X、Y 和 options 即可。

四、输入与输出

X：任意维度的有限数值 NumPy 数组。推荐样本放第一维，也兼容样本放最后一维。典型格式：
- [样本数, 长度]
- [样本数, 通道数, 时间长度]
- [样本数, 高度, 宽度]
- [样本数, 通道数, 高度, 宽度]

Y：一维类别标签，长度等于样本数，支持数值或字符串。

foreData：测试集原始类别预测。
foreDataTrain：训练集原始类别预测。
model：恢复到最佳验证损失状态的 PyTorch 模型。
info：三集合索引和标签、验证集预测、三集合概率和指标、训练历史、最佳轮次、标准化参数、输入适配记录、设备和完整 options。

五、核心函数 options 参数说明

1. 输入适配

sampleDimension：样本维，默认 'auto'。优先识别第一维，再兼容最后一维；也可填写从0开始的轴编号。

sequenceAxis：单条样本内部的序列轴，按0开始编号，默认 -1 表示最后一维。一维数组设0；[通道,时间]设1；[通道,高,宽]逐列读图设2。其余维度合并为每步特征。

2. 数据划分

splitLabels：可选预定义划分，1=训练集、2=验证集、3=测试集。适合按人员、设备、批次隔离；设置后随机划分比例不生效。

rTrain：训练+验证数据比例，默认0.80。不是纯训练集比例；剩余样本是最终测试集。

validationRatio：验证集占训练+验证数据的比例，默认0.15。验证集用于早停和模型选择，不更新参数；测试集训练结束后才评估。

shuffle：是否在分层划分前打乱，默认True。严格时序数据不应随意打乱。

seed：随机种子，默认42；设0不固定随机性。

3. 网络结构

networkType：默认'LSTM'。试用版支持LSTM和GRU；完整版增加RNN、BiRNN、BiLSTM、BiGRU。

convChannels：卷积输出通道数组，默认[32,64]，数组长度就是卷积层数。增大会提高容量和计算量。

kernelSize：卷积核长度，默认5，必须为正奇数。短序列常用3。

poolSize：最大池化窗口，默认2；设1不池化。不能超过序列长度。

rnnHidden：循环层隐藏单元数，默认64。越大记忆容量越强，也更易过拟合。

rnnLayers：循环层数，默认1。大于1时dropout也用于循环层之间。

dropout：随机失活比例，默认0.20，范围[0,1)。

4. 训练过程

solverName：默认'adam'，可选'adam'、'sgdm'、'rmsprop'。

maxEpochs：最大训练轮数，试用版默认30且最大30；可能因早停提前结束。完整版默认40且不受试用版上限约束。

learnRate：初始学习率，默认0.001。太大会震荡，太小收敛慢。

batchSize：批尺寸，默认64。大批次更稳定但更占内存。

earlyStoppingPatience：验证损失连续多少轮不改善后停止，默认8；设0关闭。

learnRateSchedule：默认'none'；可选'piecewise'。

learnRateDropPeriod：piecewise模式每隔多少轮衰减，默认15。

learnRateDropFactor：学习率衰减因子，默认0.5，范围(0,1]。

classWeight：默认'auto'，只根据训练集频数计算反比权重；'none'关闭；也可输入每类正权重。

deviceSel：默认'auto'；可选'cpu'、'gpu'。指定gpu但不可用时自动回退CPU并提示。

5. 数据处理与输出

mapflag：默认True。标准化参数只从训练集计算，避免验证集和测试集信息泄漏。

figflag：默认True。开启时生成并保存五张图；批量调参可设False。

showFigures：默认True。本地运行时弹出图窗；设False只保存图片。

caseName：图片文件名前缀，默认'CNN-RNN'，用于避免多个案例覆盖。

classNames：可选显示名称，数量和顺序必须与排序后的原始类别一致。

六、自动输出图片

每个案例生成五张独立PNG：收敛过程、测试集混淆矩阵、各类别指标、测试集真实/预测类别对比、训练/验证/测试指标对比。

七、数据使用注意事项

标准化只用训练集拟合。若同一人员、设备或批次产生多条相似样本，请用 splitLabels 分组隔离，避免随机拆分带来的虚高指标。

数据来源和许可见“数据来源与许可.txt”。

获取无水印、无100样本/30轮限制并开放全部循环结构的完整版：www.khsci.com/docs
