训练配置

模型设计完成后,需要通过训练配置寻找模型的最优值,即通过损失函数来衡量模型的好坏。训练配置也是深度学习模型关键要素之一。

通过模型计算

训练配置 - 图1 表示的影响因素所对应的房价应该是 训练配置 - 图2 , 但实际数据告诉我们房价是 训练配置 - 图3 。这时我们需要有某种指标来衡量预测值 训练配置 - 图4 跟真实值 训练配置 - 图5 之间的差距。对于回归问题,最常采用的衡量方法是使用均方误差作为评价模型好坏的指标,具体定义如下:

训练配置 - 图6

上式中的

训练配置 - 图7 (简记为: 训练配置 - 图8 )通常也被称作损失函数,它是衡量模型好坏的指标。在回归问题中均方误差是一种比较常见的形式,分类问题中通常会采用交叉熵作为损失函数,在后续的章节中会更详细的介绍。对一个样本计算损失的代码实现如下:

  1. Loss = (y1 - z)*(y1 - z)
  2. print(Loss)
  1. [0.39428312]

因为计算损失时需要把每个样本的损失都考虑到,所以我们需要对单个样本的损失函数进行求和,并除以样本总数

训练配置 - 图9

训练配置 - 图10

在Network类下面添加损失函数的计算过程如下:

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

使用定义的Network类,可以方便的计算预测值和损失函数。需要注意的是,类中的变量

训练配置 - 图11 , 训练配置 - 图12训练配置 - 图13 , 训练配置 - 图14 , 训练配置 - 图15 等均是向量。以变量 训练配置 - 图16 为例,共有两个维度,一个代表特征数量(值为13),一个代表样本数量,代码如下所示。

  1. net = Network(13)
  2. # 此处可以一次性计算多个样本的预测值和损失函数
  3. x1 = x[0:3]
  4. y1 = y[0:3]
  5. z = net.forward(x1)
  6. print('predict: ', z)
  7. loss = net.loss(z, y1)
  8. print('loss:', loss)
  1. predict: [[-0.63182506]
  2. [-0.55793096]
  3. [-1.00062009]]
  4. loss: 0.7229825055441156