美文网首页
TensorFlow(四)训练一元一次方程拟合示例

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

作者: Oo晨晨oO | 来源:发表于2017-10-11 00:54 被阅读48次

    在了解了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(四)训练一元一次方程拟合示例

          本文链接:https://www.haomeiwen.com/subject/hvliyxtx.html