使用Numpy完成深度学习框架
本文针对自己使用Numpy搭建的深度学习框架进行了介绍。
代码地址在:使用Numpy实现的简单深度学习框架
框架结构
在深度学习中,有几个基本的重要组件:1. 基础的网络模块,如全连接层,卷积层,激活函数,BN层等,它们组建起了网络的基础结构。2. 优化器,如SGD,Adam,RMSprop等,它们负责将网络中各个层的参数进行更新。3. Loss,这决定了网络所要优化的目标,并且负责在每次计算Loss后进行反向传播来计算各个层的梯度。
因此,我将这几类作为了框架的基础父类:
在Model中,我们定义了该层的参数,梯度和是否为Validation。也包含了前向传播方法,后向传播方法,和参数初始化方法。
class Model():
def __init__(self,valid=False):
self.valid=valid
self.params=OrderedDict()
self.gradient=OrderedDict()
def forward(self):
pass
def backward(self):
pass
def val(self):
self.valid=True
def train(self):
self.valid=False
def __intweight(self):
pass
在Optimizer中,需要在初始化时传入模型,以此来得到模型中的各个参数。step用于根据网络中各个层计算好的梯度,对该层的权重进行更新。
class Optimizer():
def __init__(self,model):
self.model=model
def step(self):
pass
def zero_grad(self):
pass
在Loss中,需要传入模型,batch size,网络预测值和标签。用于计算损失和梯度。
class Loss():
def __init__(self,model,batch_size):
self.model=model
self.y=None
self.label=None
self.batch_size=batch_size
def loss(self,y,label):
pass
def backward