使用Tensorflow使用梯度下降法估计线性函数的参数

tensorflow是一个功能强大的深度学习包,其内部包含了丰富的机器学习算法。

本文提供一个简单的例子来示范tensorflow的基本使用以及tf内部自带的梯度下降法。

首先,我们导入包

import tensorflow as tf
import numpy as np

使用numpy生成100个随机数,并用这100个随机数构造一个简单的线性模型

x_data = np.random.rand(100)
y_data = x_data*0.1 + 0.2

随后,我们用上面随机生成的数据构造一个线性模型

b = tf.Variable(0.)
k = tf.Variable(0.)
y = k*x_data + b

这里的y相当于是预测值,随后,我们计算y的真实值(y_data)与预测值(y)之间平方差来定义一个二次代价函数

loss = tf.reduce_mean(tf.square(y_data - y))

使用tf内部自带的方法定义一个梯度下降法来进行训练的优化器,这里的0.2表示学习率

optimizer = tf.train.GradientDescentOptimizer(0.2)

最小化代价函数

train = optimizer.minimize(loss)

由于一开始我们使用tf定义了一些变量,这里我们将这些变量初始化。

init = tf.global_variables_initializer()

开启一个session来运行tensorflow,进行模型预测

with tf.Session() as sess:
    sess.run(init)
    for setp in range(201):
        sess.run(train)
#         间隔20步打印一次k,b的值
        if setp % 20 ==0:
            print(setp, sess.run([k, b]))  

得到下面的这个结果,这里我们可以看到,当程序运行到20步的时候,k与b的值已经非常接近真实值k=0.1,b=0.2

使用纯代码实现梯度下降法还是有点麻烦的,tf内集成了梯度下降法与丰富多样的损失函数,减少了代码量,可以让研究者更多的关注到网络本身。

The End


已发布

分类

评论

发表回复

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