Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MyTorch

一个从零实现的轻量级深度学习框架,用于教学和理解神经网络的底层原理。

📋 项目简介

MyTorch 是一个纯 Python + NumPy 实现的深度学习框架,参考 PyTorch 的设计思想,实现了:

  • ✅ 自动微分(Autograd)
  • ✅ 动态计算图
  • ✅ 常用神经网络层
  • ✅ 优化器
  • ✅ 损失函数

🚀 功能特性

核心组件

  • Tensor: 支持自动梯度计算的张量类
  • Module: 神经网络模块基类,支持参数管理和自动注册
  • 自动微分: 基于反向传播的自动梯度计算

神经网络层

  • Linear: 全连接层
  • ReLU: ReLU 激活函数
  • Sigmoid: Sigmoid 激活函数

损失函数

  • MSELoss: 均方误差损失(用于回归)
  • CrossEntropyLoss: 交叉熵损失(用于分类)

优化器

  • SGD: 随机梯度下降(支持动量)
  • Adam: 自适应矩估计优化器

📦 安装依赖

pip install numpy pandas matplotlib seaborn scikit-learn

💡 使用示例

1. 创建简单的神经网络

import 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()

2. 训练模型

# 准备数据
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}')

3. 完整示例

查看 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),通过:

  1. 前向传播时构建计算图
  2. 拓扑排序确定反向传播顺序
  3. 链式法则计算梯度

模块注册

通过重写 __setattr__ 方法,自动注册:

  • Parameter 对象到 _parameters
  • Module 子模块到 _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!

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages