本仓库是一个基于python的练习级别深度学习框架Ocean,主要用于熟悉深度学习算法的各个细节。
Ocean框架具有以下特性:
- 基于静态图
- 接近于PyTorch的api风格
- 清晰、完备的前向、反向传播过程,适用于初学者学习与熟悉
- 基于
CuPy完成的cuda加速
Ocean框架完成的功能:
- 线性层
Linear,具有可学习参数W与B。 - 卷积层
Conv2d,采用img2col方法转换为GEMM实现,具有可学习的卷积核。 - 池化层
MaxPooling、AveragePooling与GlobalAveragePooling。 - 可切换
train_mode与eval_mode的BatchNorm2d与Dropout。 - 激活函数,包括
Sigmoid、Tanh、Softmax等。 - 损失函数
MSE与CELoss。 - 优化器
SGD、Adam。
Ocean框架具有非常易读且易于使用的api风格:
classMLP(nn.NodeAdder):
def__init__(self):
super().__init__()
self.fc=nn.Sequential(
nn.Linear(input_dim=784, output_dim=200),
nn.Sigmoid(),
nn.Linear(input_dim=200, output_dim=10),
nn.Softmax()
)
defforward(self, X):
returnself.fc(X)
x=Variable()
m=MLP()
pred=m(x)
y=Variable()
loss=nn.MSE()
error=loss(pred=pred, target=y)
optim=SGD(graph=m.model_graph, loss=error, lr=0.1)
foriinrange(E):
# train m.set_train_mode()
forbatch_data, batch_labelintqdm(train_loader, desc=f'epoch {i}'):
optim.zero_gradient()
fordata, labelinzip(batch_data, batch_label):
x.set_value(data)
y.set_value(label)
optim.calculate_grad()
# testm.set_eval_mode()
forbatch_data, batch_labelintqdm(test_loader):
fordata, labelinzip(batch_data, batch_label):
x.set_value(data)
y.set_value(label)
error.forward()在/demo中有基于Ocean框架的更多示例。
同时,由于个人的力量有限,Ocean还有许多不足之处有待改进,未来如果有时间会尝试进行更大的改进。