模型设计

模型设计是深度学习模型关键要素之一,也称为网络结构设计,相当于模型的假设空间,即实现模型“前向计算”(从输入到输出)的过程。

如果将输入特征和输出预测值均以向量表示,输入特征

模型设计 - 图1 有13个分量, 模型设计 - 图2 有1个分量,那么参数权重的形状(shape)是 模型设计 - 图3 。假设我们以如下任意数字赋值参数做初始化:

模型设计 - 图4

  1. w = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, -0.1, -0.2, -0.3, -0.4, 0.0]
  2. w = np.array(w).reshape([13, 1])

取出第1条样本数据,观察样本的特征向量与参数向量相乘的结果。

  1. x1=x[0]
  2. t = np.dot(x1, w)
  3. print(t)
  1. [0.03395597]

完整的线性回归公式,还需要初始化偏移量

模型设计 - 图5 ,同样随意赋初值-0.2。那么,线性回归模型的完整输出是 模型设计 - 图6 ,这个从特征和参数计算输出值的过程称为“前向计算”。

  1. b = -0.2
  2. z = t + b
  3. print(z)
  1. [-0.16604403]

将上述计算预测输出的过程以“类和对象”的方式来描述,类成员变量有参数

模型设计 - 图7模型设计 - 图8 。通过写一个forward函数(代表“前向计算”)完成上述从特征和参数到输出预测值的计算过程,代码如下所示。

  1. class Network(object):
  2. def __init__(self, num_of_weights):
  3. # 随机产生w的初始值
  4. # 为了保持程序每次运行结果的一致性,
  5. # 此处设置固定的随机数种子
  6. np.random.seed(0)
  7. self.w = np.random.randn(num_of_weights, 1)
  8. self.b = 0.
  9. def forward(self, x):
  10. z = np.dot(x, self.w) + self.b
  11. return z

基于Network类的定义,模型的计算过程如下所示。

  1. net = Network(13)
  2. x1 = x[0]
  3. y1 = y[0]
  4. z = net.forward(x1)
  5. print(z)
  1. [-0.63182506]