TensorFlow(四)训练一元一次方程拟合示例

在了解了TensorFlow的基本用法之后, 我们来进行一个小小的实战.

实战

首先我们会给出一个一元一次方程: y = 0.1x + 0.2
我们会给x赋值100次, 得到100个y值, 来作为我们这次的数据源
然后通过TensorFlow, 使用这100个数据, 通过200次梯度下降算法迭代, 来计算y = kx + b 的k和b, 进而还原出方程

代码

import tensorflow as tf
import numpy as np

#使用numpy生成100个随机点
x_data = np.random.rand(100)
y_data = x_data*0.1 + 0.2

#构造一个线性模型
b = tf.Variable(1.0)
k = tf.Variable(0.5)
y = k*x_data + b

#二次代价函数
loss = tf.reduce_mean(tf.square(y_data-y))
#定义一个梯度下降算法来进行训练的优化器
optimizer = tf.train.GradientDescentOptimizer(0.2)
#最小化代价函数
train = optimizer.minimize(loss)

#初始化变量
init = tf.global_variables_initializer()

with tf.Session() as sess:
    sess.run(init)
    for step in range(201):
        sess.run(train)
        if step%20 == 0:
            print(step, sess.run([k, b]))

输出:

0 [0.28845701, 0.6007117]
20 [0.088952653, 0.20587215]
40 [0.093617611, 0.2033923]
60 [0.096312739, 0.2019598]
80 [0.097869784, 0.20113224]
100 [0.098769322, 0.2006541]
120 [0.099289015, 0.2003779]
140 [0.099589236, 0.20021832]
160 [0.099762686, 0.20012614]
180 [0.099862881, 0.20007287]
200 [0.099920787, 0.2000421]

语法补充

1. tf.reduce_mean
tensorflow中有一类在tensor的某一维度上求值的函数。如:
求最大值tf.reduce_max(input_tensor, reduction_indices=None, keep_dims=False, name=None)
求平均值tf.reduce_mean(input_tensor, reduction_indices=None, keep_dims=False, name=None)
参数1--input_tensor:待求值的tensor。
参数2--reduction_indices:在哪一维上求解。
参数(3)(4)可忽略
举例说明:

# 'x' is [[1., 2.]
#         [3., 4.]]

x是一个2维数组,分别调用reduce_*函数如下:
首先求平均值:

tf.reduce_mean(x) ==> 2.5 #如果不指定第二个参数,那么就在所有的元素中取平均值
tf.reduce_mean(x, 0) ==> [2.,  3.] #指定第二个参数为0,则第一维的元素取平均值,即每一列求平均值
tf.reduce_mean(x, 1) ==> [1.5,  3.5] #指定第二个参数为1,则第二维的元素取平均值,即每一行求平均值

同理,还可用tf.reduce_max()求最大值等。

2. optimizer.minimize(loss)
计算模型相关参数的损失梯度, 然后根据计算所得的梯度更新变量, 使loss变小

你可能感兴趣的:(TensorFlow(四)训练一元一次方程拟合示例)