神经网络与NumPy。
nets的Python项目详细描述
1。目录
2。概述
2.1条。关于
NETS是一个轻量级的深度学习Python包,仅使用numpy。 这个项目是在 University of Oslo,与第二个相似 来自Stanford University的赋值。在
然而,这个项目被进一步推进,以使其OOP具有更简单的API。 此外,使用自定义的autograd系统更改了反向传播和更新规则。 ^{str1}$NETS的灵感来自PyTorch和{a20} 包装。在
但为什么呢?
NETS包中有NO声明来隐藏已经很好构建的深度学习包,如PyTorch 或TensorFlow。相反,这个包是为了理解所有这些库是如何工作和处理的 从头开始向前/向后传播。 当我经历这个deep的理解时,我发现很有意思与大家分享 尽可能多的我的工作,我希望这将有助于学生或人们谁想了解更多关于这门学科。在
2.2条。要求
NETS中的所有包都是从头开始的,主要使用^{str1}$numpy。但是,一些额外的 安装包可以提供更好的体验(例如保存检查点和模型)。在
- numpy
- json(可选)
- time(可选)
- pandas(可选)
- scipy(可选)
- sklearn(可选)
2.3条。安装
从PyPi安装此包
$pipinstallnets
或者从这个存储库
^{pr2}$3。状态
Development | Status | Feature |
---|---|---|
Autograd System | finished | [x] Tensor[x] Parameter |
Optimization | finished | [x] SGD[x] Adam[x] RMSprop |
Loss | in progress | [x] MSE[x] Cross Entropy[ ] BCE |
Solver | finished | [x] Train[x] Eval[x] Checkpoints |
Data | finished | [x] Dataset[x] Batch[x] Iterator |
Dense Neural Network | finished | [x] Linear[x] Sequential |
Convolutional Neural Network | finished | [x] Conv2d[x] MaxPool2d[x] Dropout |
Recurrent Neural Network | in progress | [x] RNN[ ] LSTM[ ] GRU |
4。文件
文档和教程正在进行中,很快就会发布。 你会发现一些教程和应用程序,如何开始或建立一个类似的包。在
5。开始吧
NETS架构遵循PyTorch中的架构。
它提供了一个基本的神经网络结构,所以你可以用numpy创建自己的神经网络。你需要
将数组包装在Tensor
类中以跟踪渐变,就像^{str1}$PyTorch中一样。在
5.1条。计算图
NETS对渐变下降优化使用正向和反向传递(注意:现在有其他优化器!)。在
您也可以使用自动签名系统(推荐)。它的行为与Pytorch类似,只是完全是用NumPy完成的。在
importnetst1=nets.Tensor([1,2,3],require_grad=True)t2=nets.Tensor([4,5,6])t3=t1+t2# t3 now requires gradientt3=t3.sum()# Compute the gradients for t1t3.backward()
5.2条。建立模型
模型是Module
子类,其中计算偏差、权重和参数转换。
所有模块都有一个forward
方法,必须重写该方法。
该方法将计算输入张量的前向传播,并计算变换。
如果使用autograd
系统,则不需要添加反向传播。然而,
如果您喜欢手动计算渐变,则需要重写backward
方法。在
您的Model
应该从Module
类继承并重写
forward
方法。在
importnetsimportnets.nnasnnclassModel(nn.Module):""" Create your own model. The attributes should be your submodels used during the forward pass. You don't have to necessary affect the activation function as an attribute, unless you want to set a manual backward pass. """def__init__(self,input_dim,hidden_dim,output_dim):# Initializationsuper().__init__()# Don't forget to add this lineself.layer1=nn.Linear(input_dim,hidden_dim)self.layer2=nn.Linear(hidden_dim,hidden_dim)self.layer3=nn.Linear(hidden_dim,output_dim)defforward(self,inputs):# Forward passout1=nets.tanh(self.layer1(inputs))out2=nets.tanh(self.layer2(out1))returnself.layer3(out2)model=Model(10,100,2)# Let's check the architecturemodel
输出:
Model( (layer1): Linear(input_dim=10, output_dim=100, bias=True) (layer2): Linear(input_dim=100, output_dim=100, bias=True) (layer3): Linear(input_dim=100, output_dim=2, bias=True))
同样,这与^{str1}$PyTorch提供的功能非常相似。在
6。笔记本电脑
- 在
本教程重点介绍NETS的主要部分和模块。在
在 - 在
1-Build an Autograd System with NumPy
待发布
在 - 在
2-Build a Feed Forward Neural Network with NumPy
建立一个完全连通的图像cl神经网络援助。在
在 - 在
3-Build a Convolutional Neural Network with NumPy
建立了一个用于图像分类的卷积神经网络。在
在
7。参考文献
以下是帮助开发NETS的教程和讲座/作业列表
- PyTorch documentation
- PyTorch autograd tutorial
- Joel Grus autograd tutorial
- Joel Grus autograd live coding
- Stanford University cs231n 2nd assignment
- University of Oslo in5400 1st assignment
- 项目
标签: