一、抽象化的神经网络
对于一个神经网络来的运算流程来说,基本可以分为两部分:训练与预测。而训练的基本流程又包括:输入数据、计算并激活、计算损失、优化等步骤。正对应神经网络架构的输入层、计算层、激活层、损失计算、优化器:
输入层数据:tensor,数据的流动有前向与反向两个方向。
计算层:负责接受上一层输入进行该层的运算,并将结果输入到下一层,由于tensor的流动有正向与反向两个方向,需要同时实现forward和backward两种运算。
激活层:为计算层数据提供非线性方向的运算分量。
损失计算层:计算损失和梯度
优化器:根据梯度更新模型参数。
?以下为伪代码表示:
# define
net = Net(Activity([layer1, layer2,…])) # 数据激活与计算
model = Model(net, loss_fn, optimizer) # 模型
# training
pred = model.forward(train_x) # 前向计算
loss, grads = model.backward(train_y) # 反向计算
model.apply_grad(grads) # 参数优化
# inference
test_pred = model.forward(test_x) # 预测过程
net:计算层,也可以叫计算网络。
loss_fn:损失函数
optimizer:激活函数
model:模型构建
forward、backward:正反向计算,计算后将张量数据发送到下一层或者上一层。
test_pred:预测过程。从第一层开始,传到下一层。
注:张量tensor:Tensor(张量)是一个多维数组,它是标量、向量、矩阵的高维拓展。在数学和物理学中,张量用于表示一个具有多个维度的几何对象。在机器学习和深度学习领域,Tensor是数据的基本单位,用于存储和计算数据。
二、具体实现
1、tensor数据处理