ANNA 模糊运算统一学习器
写在前面的话
整个神经生物学研究的代码都将放在下面仓库中
https://gitee.com/waterruby/ANNA.git
📖 项目概述
本项目是 ANNA (自主神经生物学网络架构)的一部分,目标是用一个神经网络同时学会多种模糊运算 (模糊加法、模糊乘法、模糊逻辑等)。模型通过将"运算类型"作为输入条件,能够在输入两个隶属度 x, y ∈ [0,1] 和指定的运算类型后,输出该运算的结果。训练完成后,模型可以在极低的误差下模拟所有已学习的模糊算子。
支持的模糊运算
| 运算名称 | 数学表达式 | 备注 |
|---|---|---|
| 有界和 | min(1, x+y) |
t-conorm |
| 概率和 | x + y - x*y |
代数和 |
| 有界积 | max(0, x+y-1) |
t-norm |
| 代数积 | x * y |
乘积 t-norm |
| 最大值 | max(x, y) |
典型 s-norm |
| 最小值 | min(x, y) |
典型 t-norm |
| 爱因斯坦和 | (x+y)/(1+xy) |
另一种 t-conorm |
🧠 模型架构
- 输入维度 :
2 + NUM_OPS- 前2维:
x, y(隶属度,0~1) - 后
NUM_OPS维:运算类型的 one‑hot 编码(当前NUM_OPS=7)
- 前2维:
- 隐藏层:2 层全连接,每层 128 个神经元,激活函数 ReLU
- 输出层 :1 个神经元,激活函数 Sigmoid,保证输出在
[0,1]内 - 损失函数:均方误差(MSE)
- 优化器 :Adam,学习率
1e-3
🗂️ 数据集与训练策略
- 数据生成 :每轮动态生成随机
(x, y),为每个样本随机选择一种运算,计算真实输出 - 训练数据量 :每个 epoch 生成
BATCH_SIZE × NUM_BATCHES_PER_EPOCH个样本(默认 256 × 2000 = 512,000) - 噪声注入 :在训练阶段可添加高斯噪声(默认
σ=0.01),提高泛化鲁棒性 - 训练轮数:默认 30 个 epoch
- 断点续训:支持中断后从最近 checkpoint 恢复
🚀 如何使用
环境要求
- Python 3.8+
- PyTorch 2.0+
- NumPy, Matplotlib
安装依赖
bash
pip install torch matplotlib numpy
快速运行(默认参数)
bash
python fuzzy_learn.py
训练过程和最终评估指标会打印到控制台,并弹出每种运算的 3D 曲面对比图。
命令行参数(可选)
若需自定义运行参数,可使用 argparse 扩展(代码中已预留,可自行取消注释)。当前硬编码参数如下:
| 参数 | 默认值 | 含义 |
|---|---|---|
CHECKPOINT_DIR |
'./fuzzy_checkpoints' |
checkpoint 保存目录 |
SAVE_EVERY_N_EPOCHS |
5 |
保存间隔(epoch) |
BATCH_SIZE |
256 |
批量大小 |
NUM_BATCHES_PER_EPOCH |
2000 |
每 epoch 的 batch 数 |
EPOCHS |
30 |
总训练轮数 |
NOISE_STD |
0.01 |
训练噪声标准差 |
HIDDEN_UNITS |
128 |
隐藏层神经元数量 |
修改方式:直接编辑脚本开头的对应变量。
断点续训与模型保存
- 训练过程中每
SAVE_EVERY_N_EPOCHS个 epoch 自动保存 checkpoint 到指定目录,同时保存checkpoint_latest.pt - 再次运行脚本时,会自动加载最新的 checkpoint 并继续训练(若已完成则跳过)
- 若要完全重新训练,请删除 checkpoint 目录下的所有
.pt文件
📊 训练结果(30 轮后)
各运算的测试误差(无噪声测试集)
| 运算 | MSE | MAE | MaxAE |
|---|---|---|---|
| 有界和 | 2.992e-5 | 0.004419 | 0.015637 |
| 概率和 | 9.39e-6 | 0.002359 | 0.015478 |
| 有界积 | 1.796e-5 | 0.002567 | 0.050808 |
| 代数积 | 1.398e-5 | 0.003068 | 0.031652 |
| 最大值 | 1.931e-5 | 0.003211 | 0.020418 |
| 最小值 | 9.01e-6 | 0.001950 | 0.022384 |
| 爱因斯坦和 | 1.728e-5 | 0.003380 | 0.020421 |
混合运算整体性能
- 整体 MSE :
1.597e-5(所有运算混合的 20,000 个测试样本)
结论 :单一神经网络成功以极高精度模拟了 7 种不同的模糊运算,最大绝对误差不超过 5%,绝大多数在 2% 以内。有界积的 MaxAE 略高(5%),推测在 x+y≈1 边界附近拟合稍差。
🖼️ 可视化
训练结束后,程序会为每种运算绘制真值曲面(左)与模型预测曲面(右)的 3D 对比图,方便直观评估拟合效果。
⚠️ 中文显示问题 :若图表中中文无法显示(显示为方框),请在
import matplotlib.pyplot as plt后添加以下代码:
pythonplt.rcParams['font.sans-serif'] = ['SimHei'] # 或 'Microsoft YaHei' plt.rcParams['axes.unicode_minus'] = False
📁 文件结构
experiments/
├── fuzzy_learn.py # 主训练脚本
├── fuzzy_checkpoints/ # 自动生成的 checkpoint 目录
│ ├── checkpoint_epoch_5.pt
│ ├── checkpoint_epoch_10.pt
│ └── checkpoint_latest.pt
└── README.md # 本文档
🤝 贡献
本项目为 ANNA 神经生物学研究的一部分,欢迎提出 Issues 或 Pull Requests。
https://gitee.com/waterruby/ANNA.git
📄 许可证
Apache 2.0 License