机器学习--TensorFlow训练摄氏度转为华氏度简单模型详解

现实中,我们已经知道了F=1.8*C+32,那么如何使用机器学习通过训练获得这一结论呢?

《机器学习--TensorFlow训练摄氏度转为华氏度简单模型详解》

而这个只需要几行代码就搞定了,真的很神奇。

代码

l0 = tf.keras.layers.Dense(units=1, input_shape=[1]) 
model = tf.keras.Sequential([l0])
model.compile(loss='mean_squared_error', optimizer=tf.keras.optimizers.Adam(0.1))
history = model.fit(celsius_q, fahrenheit_a, epochs=500, verbose=False)
model.predict([100.0])

这个示例演示了任何机器学习问题的一般流程。你将根据相同的流程创建和训练神经网络并用模型做出预测。

训练流程

训练流程(发生在 model.fit(...) 当中)是指将网络的内部变量调整为最佳可能值,使它们能够将输入映射到输出。为了实现这个目标,我们将采用梯度下降法这一优化流程,它会使用数值分析找到模型内部变量的最佳可能值。

进行机器学习并不需要了解这些细节内容。但是如果你好奇的话:梯度下降法会以迭代方式调整参数,每次朝着正确的方向小幅更改参数,直到达到最佳值。“最佳值”是指再调整的话,会降低模型的效果。在每次迭代过程中衡量模型好坏的函数称为“损失函数”,每次调整的目标是“最小化损失函数”。

训练流程以前向传播开始,在此流程中,我们将输入数据提供给神经网络(请参见图 1)然后,模型将内部数学运算应用到输入和内部变量上,从而预测答案(在图 1 中,“模型预测出一个值”)。

在我们的示例中,输入是摄氏度数,模型预测出相应的华氏度数。

《机器学习--TensorFlow训练摄氏度转为华氏度简单模型详解》

1、前向传播

预测出一个值后,模型将计算预测值与正确值之间的差值。这个差值称为损失,用于衡量模型执行映射任务的效果。我们使用损失函数计算损失,并且在调用 model.compile() 时通过损失参数指定损失函数。

计算损失后,模型将调整所有层级的内部变量(权重和偏差),从而最小化该损失,使输出值更接近正确值(请参见图 2)。

《机器学习--TensorFlow训练摄氏度转为华氏度简单模型详解》
图2、反向传播

这个优化流程称为梯度下降法。我们会通过一个具体算法计算每个内部变量的新值,并且在调用 model.compile(...) 时用优化器参数指定该算法。在此示例中,我们使用的是 Adam 优化器。

现在你应该知道以下术语的含义了:

  • 特征:模型的输入
  • 样本:用于训练流程的输入/输出对
  • 标签:模型的输出
  • 层级:神经网络中相互连接的节点集合。
  • 模型:神经网络的表示法
  • 密集全连接层 (FC):一个层级中的每个节点都与上个层级中的每个节点相连。
  • 权重和偏差:模型的内部变量
  • 损失:期望输出和真实输出之间的差值
  • MSE:均方误差,一种损失函数,它会将一小部分很大的差值视作比大量很小的差值更糟糕。
  • 梯度下降法:每次小幅调整内部变量,从而逐渐降低损失函数的算法。
  • 优化器:梯度下降法的一种具体实现方法。(有很多算法。在这门课程中,我们将仅使用“Adam”优化器,它是 ADAptive with Momentum 的简称,并且被视为最佳优化器。)
  • 学习速率:梯度下降过程中的损失改进“步长”。
  • 批次:在训练神经网络的过程中使用的一组样本。
  • 周期:完全经过整个训练数据集一轮
  • 前向传播:根据输入计算输出值
  • 反向传播:根据优化器算法计算内部变量的调整幅度,从输出层级开始,并往回计算每个层级,直到抵达输入层。

文章摘录于google Udacity教程。

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注