(五)TensorFlow实现线性回归算法

(五)TensorFlow实现线性回归算法

本节以最简单y=0.7x+0.6线性回归为例,将TensorFlow训练、训练后模型保存及可视化串联介绍。

一、相关步骤

  • 数据预处理(可选)
  • 构建模型
  • 定义损失函数及优化方法
  • 使用梯度下降迭代训练(可其它优化方法)
  • 保存模型
  • 画图
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    import tensorflow as tf
    # 消除警告(使用源码安装可自动消除)
    import os
    os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

    # 回归函数
    def my_regression():

    # 准备数据
    with tf.variable_scope("data"):
    # 准备100 条数据x的平均值为5.0 标准差为1.0
    x = tf.random_normal([100, 1], mean = 5.0, stddev=1.0, name="x")
    # 真实的关系为 y = 0.7x + 0.6
    y_true = tf.matmul(x, [[0.7]]) + 0.6

    # 创建模型
    with tf.variable_scope ("model"):
    # 创建权重变量
    weight = tf.Variable(tf.random_normal([1, 1], mean=1.0, stddev=0.1), name="weight")

    # 创建偏置变量,初始值为1
    bias = tf.Variable(1.0, name="bias")

    # 预测结果
    y_predict = tf.matmul(x, weight) + bias

    # 计算损失
    with tf.variable_scope ("loss"):
    # 计算损失
    loss = tf.reduce_mean(tf.square(y_predict - y_true))

    # 减少损失
    with tf.variable_scope("optimizer"):
    # 梯度下降减少损失,每次的学习率为0.1
    train_op = tf.train.GradientDescentOptimizer(0.01).minimize(loss)

    # 收集变量
    tf.summary.scalar("losses", loss)
    tf.summary.histogram("weightes", weight)

    # 合并变量
    merged = tf.summary.merge_all()

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

    # 梯度下降优化损失
    with tf.Session() as sess:
    sess.run(init_op)
    print("初始的权重为{}, 初始的偏置为{}".format(weight.eval(), bias.eval()))
    # 添加board记录文件
    file_write = tf.summary.FileWriter('/Users/liuyan/tensorBoard/my_regression', graph=sess.graph)
    # 循环训练线性回归模型(20000次)
    for i in range(20000):
    sess.run(train_op)
    print("训练第{}次的权重为{}, 偏置为{}".format(i,weight.eval(), bias.eval()))
    # 观察每次值的变化
    # 运行merge
    summery = sess.run(merged)
    # 每次收集到的值添加到文件中
    file_write.add_summary(summery, i)

    if __name__ == '__main__':
    my_regression()

二、运行结果

三、模型的保存

  • 模型的保存

    1
    2
    saver = tf.train.Saver()
    saver.save(sess, "./tmp/ckpt/test")
  • 模型恢复

    1
    save.restore(sess, "./tmp/ckpt/test")

四、可视化

五、扩展

关于损失函数和优化器,有很多种方法,其中也包括很多种激活函数,激活函数加在每一层神经网络后,避免多层网络变成单层。在线性回归基础上使用sigmoid激活函数就变成了逻辑回归(常用于二分类),使用softmax激活函数就是多分类。

  • 常用激活函数
  • 常用损失函数
  • 常用优化器

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×