zoukankan      html  css  js  c++  java
  • 第六节 实现简单的线性回归

    import tensorflow as tf
    import os
    
    
    # 定义命令行参数,"max_step", 100, "模型训练的步数", 三个参数都是必须的,max_step在程序中引用的变量名,100是给第一个参数设置的默认值,第三个参数是第一个参数的参数说明
    tf.app.flags.DEFINE_integer("max_step", 100, "模型训练的步数")
    
    # 定义获取命令行参数的名字,在程序中调用aaa.max_step
    aaa = tf.app.flags.FLAGS
    
    def myregression():
        """实现一个线性回归"""
        with tf.variable_scope('data'):
            # 定义变量作用域,使代码结构更清晰,而且在TensorBoard可视化中显示更清晰
    
            # 1.构造数据,x 特征值 [100, 1]  y 目标值 [100]
            x = tf.random_normal([100, 1], mean=1.75, stddev=0.5, name='x_data')
    
            # 矩阵相乘必须是二维的
            y_true = tf.matmul(x, [[0.7]]) + 0.8
    
        with tf.variable_scope('model'):
            # 2.建立线性回归模型:1个权重,一个偏置
            # 随机初始化一个权重和偏置的值,计算损失,然后通过梯度下降不断寻找最小损失
            # 权重和偏置必须使用变量定义,因为它们的值是需要不断改变的,trainable参数指定是否随梯度下降进行优化,默认true
            weight = tf.Variable(tf.random_normal([1, 1], mean=0.0, stddev=1.0, name='w'), trainable=True)
            bias = tf.Variable(0.0, name='b')
    
            y_predict = tf.matmul(x, weight) + bias
    
        with tf.variable_scope('loss'):
            # 3.建立损失函数,square求平方,reduce_mean求平均值
            loss = tf.reduce_mean(tf.square(y_true-y_predict))
    
        with tf.variable_scope('optimizer'):
            # 4.梯度下降优化损失,0.1是学习率,minimize最小化损失
            train_op = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
    
        # 收集tensor,losser是在TensorBoard后台显示的名字
        tf.summary.scalar("losser", loss)
        tf.summary.histogram("w", weight)
    
        # 定义合并tensor的op,在sess中方便将其添加进事件中
        merge = tf.summary.merge_all()
    
        # 定义对变量进行初始化的op
        init_op = tf.global_variables_initializer()
    
        # 定义一个保存模型的实例op
        saver = tf.train.Saver()
    
        # 通过会话运行程序
        with tf.Session() as sess:
            # 初始化变量
            sess.run(init_op)
    
            # 打印最先随机初始化的权重和偏置
            print("随机初始化的参数权重:{},偏置:{}".format(weight.eval(), bias.eval()))
    
            # 建立事件文件
            filewriter = tf.summary.FileWriter("./tmp/summary/test", graph=sess.graph)
    
            # 加载模型,覆盖模型当中的一开始随机初始化的参数,让模型接着从上次被打断的地方的参数继续进行
            if os.path.exists("./tmp/ckpt/model/checkpoint"):
                saver.restore(sess, "./tmp/ckpt/model")
    
            # 循环运行优化
            for i in range(aaa.max_step):
                sess.run(train_op)
    
                # 运行合并的merge op
                summ = sess.run(merge)
    
                # 将summ添加入事件中
                filewriter.add_summary(summ, i)
    
                print("第{}次优化的参数权重:{},偏置:{}".format(i, weight.eval(), bias.eval()))
    
            # 保存模型,model保存模型的名字,一定要有
            saver.save(sess, "./tmp/ckpt/model")
    
    if __name__ == "__main__":
        myregression()
  • 相关阅读:
    jvm类加载机制
    线程误区-join,wait(里边还是调用的wait)
    线程间通信wait和notify【All】简介
    指令重排序
    window.opener
    scrollIntoView()
    保持饥饿,保持愚蠢
    执行sql语句,不依靠实体 获取string值
    join函数详解
    html常用代码大全
  • 原文地址:https://www.cnblogs.com/kogmaw/p/12597842.html
Copyright © 2011-2022 走看看