购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.3 使用TensorFlow 2.0模式进行线性回归的一个简单例子

下面以一个线性回归的模型为例来介绍使用Eager模型进行机器学习计算的方法,其中涉及模型参数的保存与读取以及保存模型的重新计算。

2.3.1 模型的工具与数据的生成

首先是模型的定义,这里使用一个简单的一元函数模型作为待测定的模型基础,公式如下:

即3倍的输入值加上0.217作为输出值。

2.3.2 模型的定义

由于既定的模型是一个一元线性方程,因此在使用Eager模型时自定义一个类似的数据模型,代码如下:

    weight = tfe.Variable(1., name="weight")
    bias = tfe.Variable(1., name="bias")
    def model(xs):
       logits = tf.multiply(xs, weight) + bias
    return logits

首先使用固定数据定义模型初始化参数weight和bias,之后定义一个线性回归模型在初始状态拟合了一元回归模型。

2.3.3 损失函数的定义

对于使用机器学习进行数据拟合,一个非常重要的内容就是损失函数的编写,其往往决定着对于数据从空间中的哪个角度去拟合真实数据。

在本例中,使用均方差(MSE)去计算拟合的数据与真实数据之间的误差,代码如下:

    tf.losses.MeanSquaredError()(model(xs), ys)

这是使用TensorFlow自带损失函数计算MSE(均方差)的表示方法,当然也可以使用自定义的损失函数:

    tf.reduce_mean(tf.pow((model(xs) - ys), 2)) / (2 * 1000)

这两者是等效的,不过自定义的损失函数可以使程序编写者获得更大的自由度。对于新手来说还是使用定制的损失函数去计算较好,请读者自行斟酌。

2.3.4 梯度函数的更新计算

可以直接调用TensorFlow的优化器完成梯度函数的计算。笔者选择使用Adam优化器作为优化工具,代码如下:

    opt = tf.train.AdamOptimizer(1e-1)

opt对应的是TensorFlow优化器的对应写法。全部代码如下:

【程序2-5】

该程序的运行结果如图2.3所示。

图2.3 程序2-5的运行结果

可以看到经过迭代计算以后,生成的weight值和bias值较好地拟合成预定的数据。有TensorFlow 1.X编程经验的读者可能会对这种数据更新的方式不习惯,不过记住这种写法即可:

    grads = tape.gradient(_loss, [weight, bias])
    opt.apply_gradients(zip(grads, [weight, bias]))

除此之外,Keras对于梯度的更新采用回调的方式,代码如下:

全部代码如下所示(函数调用过于复杂,仅供参考):

【程序2-6】

在这里函数直接被调用,其内部多次用到回调函数,对Python有较多研究的读者可以尝试。 E3SKIJ3cWAMHD5QObMFR4ZKydXhrfb/qQm4/gimlmW+Xhh1ywI+EhIwxM1IVodTF

点击中间区域
呼出菜单
上一章
目录
下一章
×