# CANNDY
**Repository Path**: mafraonia/CANNDY
## Basic Information
- **Project Name**: CANNDY
- **Description**: 基于NumPy构建的人工神经网络框架
Chen's Artificial Neural Network constructeD with numpY
- **Primary Language**: Python
- **License**: MulanPSL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 10
- **Created**: 2025-03-19
- **Last Updated**: 2025-03-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# CANNDY
## 项目名称
基于NumPy构建的人工神经网络框架
Chen's Artificial Neural Network constructeD with numpY
## 项目简介
本项目致力于为对神经网络和人工智能感兴趣的伙伴们提供一个学习和实践的平台。
本项目不旨在构建大规模模型或直接用于生产环境的模型,
但力求通过实现一系列经典的神经网络模型,深入探讨神经网络的底层原理。
本项目提供了详尽的实现步骤,以帮助学习者深入理解神经网络的构建过程与内部工作的机制。
此外,本项目采用的不是基于计算图的构建方式,而是通过公式推导构建的层级架构,以便更直观地剖析神经网络的工作机制。
希望本项目能够帮助感兴趣的伙伴们建立起对神经网络的深刻理解,从而在人工智能领域的进一步学习和研究打下坚实的基础。
**特别说明:`本代码仅供参考学习、竞赛和科学研究等非商业用途,在复制核心代码时请注明出处`**
## 安装教程
**1. 建议使用 `Anaconda` 创建 `Python` 环境**
使用 Anaconda 创建环境可以方便地管理依赖包,避免版本冲突。建议从 [Anaconda 官网](https://www.anaconda.com/download/success) 下载并安装 Anaconda。如果需要特定版本,可以访问 [Anaconda所有版本下载地址](https://repo.anaconda.com/archive/)。
安装完成后,运行以下命令创建 Python 环境:
```bash
conda create --name my_env python=3.9
conda activate my_env
```
**注意**:本项目支持 Python 3.7 及以上版本,建议使用 Python 3.9 以获得最佳兼容性。请确保已安装 Python 3.7 或更高版本。
**2.安装必要包**
本项目依赖以下包:`numpy`、`matplotlib`、`tqdm`。请确保已安装 Python 3.7 或更高版本,运行以下命令一键安装必要包:
```bash
pip install numpy matplotlib tqdm
```
**3.安装可选包**
在使用本项目中强化学习模型训练CartPole环境时需要安装游戏环境相关包。运行以下命令一键安装:
```bash
pip install gym==0.22.0 pygame==2.2.0 pyglet==1.5.27
```
在使用`gym`时可能会遇到如下报错:
```
ImportError: cannot import name 'rendering' from 'gym.envs.classic_control'
```
若遇到该问题请将rendering.py放到..\Anaconda\Lib\site-packages\gym\envs\classic_control\目录下
参考网址:https://blog.csdn.net/qq_34666857/article/details/123551558
## 框架结构
```
CANNDY/
├── Core/ # 人工神经网络框架核心
│ ├── Activation.py # 实现各种激活函数
│ ├── Layers.py # 实现各种神经网络层
│ ├── Loss.py # 实现各种损失函数
│ ├── Module.py # 实现各种神经网络模型
│ └── Optimizer.py # 实现各种优化器
├── Datasets/ # 数据集
│ ├── Mnist_Test/ # 手写数字识别数据集(单独生成)
│ ├── cora.tar.gz # 图神经网络数据集Cora
│ ├── iris.csv # 鸢尾花数据集
│ ├── mnist.pkl.gz # 手写数字识别数据集
│ └── titanic.csv # 泰坦尼克幸存者数据集
├── Examples/ # 使用该框架实现的各种具体实例模型
│ ├── AutoEncoder/ # 自编码器模型
│ │ ├── AutoEncoder.py # 自编码器模型
│ │ └── train_AutoEncoder.py # 运行自编码器模型实例
│ ├── DQN/ # 深度Q-学习网络模型
│ │ ├── agent.py # DQN智能体
│ │ ├── algorithm.py # DQN算法
│ │ ├── DQNLoss.py # DQN损失函数
│ │ ├── replay_memory.py # 经验回放池
│ │ ├── train_DQN.py # 训练DQN玩CartPole
│ │ └── train_DQN_Snake.py # 训练DQN玩贪吃蛇
│ ├── PolicyGradient/ # 策略梯度网络模型
│ │ ├── agent.py # PG智能体
│ │ ├── algorithm.py # PG算法
│ │ ├── PGLoss.py # PG损失函数
│ │ ├── replay_memory.py # 经验回放池
│ │ ├── train_PG.py # 训练PG玩CartPole
│ │ └── train_PG_Snake.py # 训练PG玩贪吃蛇
│ ├── RL_Envs/ # 强化学习环境(单独实现)
│ │ └── Snake.py # 贪吃蛇游戏环境
├── Models/ # 使用该框架实现的几种经典的模型
│ ├── CNN/ # 卷积神经网络
│ │ ├── CNN_Mnist.py # 卷积神经网络学习手写数字识别分类
│ │ ├── CNN_Series.py # 卷积神经网络学习周期数据回归
│ │ ├── CNN_Visualize.py # 卷积神经网络学习手写数字识别结果可视化
│ │ ├── LeNet-5_Params.json # 卷积神经网络学习手写数字识别所得参数
│ │ └── Plot_Contrast.py # 卷积神经网络不同参数效果对比绘图
│ ├── GCN/ # 图卷积神经网络
│ │ └── GCN_Cora.py # 图卷积神经网络学习Cora数据
│ └── MLP/ # 全连接神经网络(多层感知机)
│ │ ├── MLP_Batch.py # 全连接神经网络学习批数据测试
│ │ ├── MLP_Classifier.py # 全连接神经网络简单分类测试
│ │ ├── MLP_Iris.py # 全连接神经网络对鸢尾花数据集分类测试
│ │ ├── MLP_Mnist.py # 全连接神经网络学习手写数字识别分类
│ │ ├── MLP_Regress.py # 全连接神经网络学习简单数据回归
│ │ └── Plot_Classifier.py # 对分类结果绘图函数
│ ├── RNN/ # 循环神经网络
│ │ └── RNN_Predict.py # 循环神经网络学习周期数据回归
├── Notes/ # 框架实现的细节笔记
├── Pics/ # 框架实现的模型运行效果图
└── README.md # 项目文档
```
## 更新计划
- [x] 更新项目文档
- [ ] 更新算法笔记
## 效果展示
- MLP模型对同心圆数据集分类效果/对sin函数回归拟合效果

- 循环神经网络模型与一维卷积时间序列模型对sin函数未来趋势预测效果
- 卷积神经网络LeNet-5模型手写数字的识别效果(测试集准确率高达99%)
0. 训练损失与测试准确率表现及不同trick下的模型表现
1. 输入图像与输出预测结果及概率
2. 第1层卷积层和第1层池化层得到的特征图
3. 第2层卷积层和第2层池化层得到的特征图
- 自编码器模型效果

- DQN(深度Q学习网络)模型训练玩贪吃蛇最终效果

- PG(策略梯度网络)模型训练玩CartPole最终效果

## 参与贡献
**Luchen Wang**
(如在使用过程中遇到任何问题,可随时联系邮箱:wangluchen567@qq.com)