TensorFlow入门6 -- 鸢尾(Iris)花分类,训练模型

训练模型是确定构成模型的理想参数的过程。

第一步:定义损失(loss)函数和 梯度(gradient)函数

损失(loss)是一种衡量指标,用于衡量模型的预测偏离其标签的程度。或者更悲观地说是衡量模型有多差。要确定此值,模型必须定义损失函数。例如,线性回归模型通常将均方误差用于损失函数,而逻辑回归模型则使用对数损失函数

本文用tf.losses.sparse_softmax_cross_entropy函数计算损失,该函数用预测值和期望值作为输入参数,当预测变差的时候,返回的损失值会逐渐变大。损失函数如下图所示


梯度(grad)函数 使用 损失函数loss 和  tfe.GradientTape 来record operations,并计算用于优化模型的梯度( gradients)。


TensorFlow入门6 -- 鸢尾(Iris)花分类,训练模型_第1张图片

第二步:创建优化器 (optimizer)

优化器 (optimizer)是梯度下降法的一种具体实现。TensorFlow 的优化器基类是 tf.train.Optimizer。不同的优化器(tf.train.Optimizer 的子类)会考虑如下概念:

动量 (Momentum)

更新频率 (AdaGrad = ADAptive GRADient descent; Adam = ADAptive with Momentum;RMSProp)

稀疏性/正则化 (Ftrl)

更复杂的计算方法 (Proximal, 等等)

甚至还包括 NN 驱动的优化器。

如下图所示:


TensorFlow入门6 -- 鸢尾(Iris)花分类,训练模型_第2张图片
图片来源:https://cs231n.github.io/assets/nn3/opt1.gif

TensorFlow 有很多个 optimization algorithms ,本文使用的是实现 standard gradient descent(SGD) 算法的 tf.train.GradientDescentOptimizer 优化器。


 输入参数:learning_rate(学习速率)是指,每次迭代,梯度下降法都会将学习速率与梯度相乘,得出的乘积称为梯度步长

学习速率是一个重要的超参数,通常调整该参数用于获得更好的结果

第三步:训练循环(Training loop)

一次训练循环将数据集送入模型以帮助它做出更好的预测。典型的训练步骤如下:

1,Iterate each epoch. An epoch is one pass through the dataset.

2,Within an epoch, iterate over each example in the training Dataset grabbing its features (x) and label (y).

3,Using the example's features, make a prediction and compare it with the label. Measure the inaccuracy of the prediction and use that to calculate the model's loss and gradients.

4,Use an optimizer to update the model's variables.

5,Keep track of some stats for visualization.

6,Repeat for each epoch.


TensorFlow入门6 -- 鸢尾(Iris)花分类,训练模型_第3张图片

变量num_epochs,定义在数据集上的训练时间。

num_epochs是一个用户可以调整的超参数,设定一个合适的num_epochs既需要经验也需要实验。

下图是num_epochs = 2001的训练结果,可以发现:训练模式的时间越长,并不能保证训练出的模型越好。这是一个反直觉的( Counter- intuitively)的结论。


TensorFlow入门6 -- 鸢尾(Iris)花分类,训练模型_第4张图片

第四步:绘制损失函数图

绘制损失函数图,让损失(loss)和精度(Accuracy)随训练时间的变化趋势可视化,是很有帮助的。代码如下:


TensorFlow入门6 -- 鸢尾(Iris)花分类,训练模型_第5张图片


TensorFlow入门6 -- 鸢尾(Iris)花分类,训练模型_第6张图片

你可能感兴趣的:(TensorFlow入门6 -- 鸢尾(Iris)花分类,训练模型)