一个从零实现的轻量级深度学习框架,用于教学和理解神经网络的底层原理。
MyTorch 是一个纯 Python + NumPy 实现的深度学习框架,参考 PyTorch 的设计思想,实现了:
- ✅ 自动微分(Autograd)
- ✅ 动态计算图
- ✅ 常用神经网络层
- ✅ 优化器
- ✅ 损失函数
- Tensor: 支持自动梯度计算的张量类
- Module: 神经网络模块基类,支持参数管理和自动注册
- 自动微分: 基于反向传播的自动梯度计算
Linear: 全连接层ReLU: ReLU 激活函数Sigmoid: Sigmoid 激活函数
MSELoss: 均方误差损失(用于回归)CrossEntropyLoss: 交叉熵损失(用于分类)
SGD: 随机梯度下降(支持动量)Adam: 自适应矩估计优化器
pip install numpy pandas matplotlib seaborn scikit-learnimport mytorch
# 定义模型
class SimpleNet(mytorch.Module):
def __init__(self):
super(SimpleNet, self).__init__()
self.fc1 = mytorch.Linear(10, 32)
self.fc2 = mytorch.Linear(32, 2)
self.relu = mytorch.ReLU()
def forward(self, x):
x = self.fc1(x)
x = self.relu(x)
x = self.fc2(x)
return x
model = SimpleNet()# 准备数据
X_train = np.random.randn(100, 10)
y_train = np.random.randint(0, 2, (100,))
# 设置优化器和损失函数
optimizer = mytorch.SGD(model.parameters(), lr=0.01)
criterion = mytorch.CrossEntropyLoss()
# 训练循环
for epoch in range(10):
# 前向传播
x = mytorch.Tensor(X_train)
y = mytorch.Tensor(y_train)
outputs = model(x)
loss = criterion(outputs, y)
# 反向传播
optimizer.zero_grad()
loss.backward()
optimizer.step()
print(f'Epoch {epoch}, Loss: {loss.item():.4f}')查看 diabetes_predict/FNN_main.py 了解完整的糖尿病预测示例,包括:
- 数据预处理和标准化
- 模型训练与验证
- 准确率计算
- 训练曲线可视化
- 混淆矩阵分析
MyTorch/
├── mytorch.py # 核心框架实现
├── FNN_model.py # 前馈神经网络模型和训练/评估函数
├── diabetes_predict/ # 糖尿病预测示例项目
│ ├── FNN_main.py # 主训练脚本
│ └── *.csv # 数据集
├── README.md # 项目说明
└── LICENSE # MIT 许可证
- 代码清晰易读,注释详细
- 完全使用 Python 和 NumPy,无其他深度学习框架依赖
- 每个组件都可以独立理解和学习
- 完整的自动微分系统
- 支持动态计算图
- 梯度正确传播和累积
- 参数自动注册和管理
- 训练/评估函数封装
- 模型保存与加载
- 可视化支持(训练曲线、混淆矩阵)
使用反向模式自动微分(Reverse-mode Autodiff),通过:
- 前向传播时构建计算图
- 拓扑排序确定反向传播顺序
- 链式法则计算梯度
通过重写 __setattr__ 方法,自动注册:
Parameter对象到_parametersModule子模块到_modules
在梯度累积时正确处理 NumPy 广播,确保梯度形状匹配。
使用 BRFSS 2015 数据集进行二分类预测:
数据集特征:
- 21 个输入特征(BMI、年龄、血压等)
- 253,680 个样本
- 二分类目标(是否患糖尿病)
模型架构:
Input(21) → Linear(32) → ReLU →
Linear(32) → ReLU → ... (重复多层) →
Linear(2) → Softmax
训练结果:
- 训练准确率: ~75%
- 验证准确率: ~75%
- 测试准确率: ~75%
- 添加更多激活函数(Tanh、LeakyReLU 等)
- 实现卷积层和池化层
- 添加 Batch Normalization
- 实现 Dropout
- 支持 GPU 加速
- 添加学习率调度器
- 更多优化器(RMSprop、AdaGrad 等)
如果你想深入理解自动微分和神经网络实现,推荐:
欢迎提交 Issue 和 Pull Request!
本项目采用 MIT 许可证 - 详见 LICENSE 文件
F010110
⭐ 如果这个项目对你有帮助,请给个 Star!