设为首页 加入收藏

TOP

TensorFlow 基本用法示例(三)
2018-03-18 16:21:39 】 浏览:602
Tags:TensorFlow 基本 用法 示例
能 BroadCast,所以在这里做乘法前需要先调用 reshape() 一下转成 1×2 的标准矩阵,最后将结果表示为 y。


这样我们就构造出来了一个线性模型。


这里的 y 是我们模型中输出的值,而真实的数据却是我们输入的 y_data,即 y_label。


损失函数 要拟合这个平面的话,我们需要减小 y_label 和 y 的差距就好了,这个差距越小越好。


所以接下来我们可以定义一个损失函数,来代表模型实际输出值和真实值之间的差距,我们的目的就是来减小这个损失,代码实现如下:


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


这里调用了 square() 方法,传入 y_label 和 y 的差来求得平方和,然后使用 reduce_mean() 方法得到这个值的平均值,这就是现在模型的损失值,我们的目的就是减小这个损失值,所以接下来我们使用梯度下降的方法来减小这个损失值即可,定义如下代码:


optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)


这里定义了 GradientDescentOptimizer 优化,即使用梯度下降的方法来减小这个损失值,我们训练模型就是来模拟这个过程。


运行模型 最后我们将模型运行起来即可,运行时必须声明一个 Session 对象,然后初始化所有的变量,然后执行一步步的训练即可,实现如下:


with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    for step in range(201):
        sess.run(train, feed_dict={x: x_data, y: y_data})
        if step % 10 == 0:
            print(step, sess.run(w), sess.run(b))


这里定义了 200 次循环,每一次循环都会执行一次梯度下降优化,每次循环都调用一次 run() 方法,传入的变量就是刚才定义个 train 对象,feed_dict 就把 placeholder 类型的变量赋值即可。随着训练的进行,损失会越来越小,w 和 b 也会被慢慢调整为拟合的值。


在这里每 10 次 循环我们都打印输出一下拟合的 w 和 b 的值,结果如下:


0 [ 0.31494665  0.33602586] [ 0.84270978]
10 [ 0.19601417  0.17301694] [ 0.47917289]
20 [ 0.23550016  0.18053198] [ 0.44838765]
30 [ 0.26029009  0.18700737] [ 0.43032286]
40 [ 0.27547371  0.19152154] [ 0.41897511]
50 [ 0.28481475  0.19454622] [ 0.41185945]
60 [ 0.29058149  0.19652548] [ 0.40740564]
70 [ 0.2941508  0.19780098] [ 0.40462157]
80 [ 0.29636407  0.1986146 ] [ 0.40288284]
90 [ 0.29773837  0.19913  ] [ 0.40179768]
100 [ 0.29859257  0.19945487] [ 0.40112072]
110 [ 0.29912385  0.199659  ] [ 0.40069857]
120 [ 0.29945445  0.19978693] [ 0.40043539]
130 [ 0.29966027  0.19986697] [ 0.40027133]
140 [ 0.29978839  0.19991697] [ 0.40016907]
150 [ 0.29986817  0.19994824] [ 0.40010536]
160 [ 0.29991791  0.1999677 ] [ 0.40006563]
170 [ 0.29994887  0.19997987] [ 0.40004089]
180 [ 0.29996812  0.19998746] [ 0.40002549]
190 [ 0.29998016  0.19999218] [ 0.40001586]
200 [ 0.29998764  0.19999513] [ 0.40000987]


可以看到???随着训练的进行,w 和 b 也慢慢接近真实的值,拟合越来越精确,接近正确的值。


首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇那些C语言缺失的,我在Rust里找到.. 下一篇Java浮点数转人民币读法

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目