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

举报
开飞机的大象 发表于 2018/11/29 14:30:16 2018/11/29
【摘要】 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内集成了梯度下降法与丰富多样的损失函数,减少了代码量,可以让研究者更多的关注到网络本身。

====================================================================

本文发表在李思原博客“机器在学习”

原文链接:http://www.siyuanblog.com/?p=926

欢迎扫码关注我的微信公众号:聚数为塔

qrcode_for_gh_b8391fc7ce11_430.jpg

=====================================================================


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。