学习八

tensorflow实现线性回归

import tensorflow as tf
import os

#自实现一个线性回归预测
def myregression():
    with tf.variable_scope("data"):#变量作用域,代码更加分明
        #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"):
        #建立线性回归模型 1个特征有一个权重 1个偏置 y=w x+b
        #随机给一个权重和偏置的值,然后计算损失,在当前状态下优化
        #tf.Variable()这个函数里面有一个trainable参数为true时指这个变量能跟着梯度下降一起优化,就是说这个变量可以变化,如果为false则不能变化
        weight=tf.Variable(tf.random_normal([1,1],mean=0.0,stddev=1.0),name="w")
        bias=tf.Variable(0.0,name="b")
        y_predict=tf.matmul(x,weight)+bias
    with tf.variable_scope("loss"):
        #建立损失函数,均方误差
        loss=tf.reduce_mean(tf.square(y_true-y_predict))

    with tf.variable_scope("optimizer"):
        #4.梯度下降优化损失 0.1是学习率,学习率这个参数需要不断调整,学习率过大会出现梯度爆炸问题,学习率大梯度会指数爆炸式增加

        train_op=tf.train.GradientDescentOptimizer(0.1).minimize(loss)
    #二、添加权重参数,损失值等在tensorboard观察的情况 1收集变量 2.合并变量写入事件文件
    #收集tensor
    tf.summary.scalar("losses",loss)#收集对于损失函数和准确率等单值变量,name为变量名字,tensor为值
    tf.summary.histogram("weights",weight)#收集高维度的变量参数
    #合并变量写入事件文件,定义合并tensor的op
    merged=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("随机初始化参数权重:%f,偏置为:%f" %(weight.eval(),bias.eval()))
        #建立事件文件
        filewriter = tf.summary.FileWriter("./summary/test", graph=sess.graph)

        #加载模型,覆盖模型当中随机定义的参数,从上次训练的参数结果开始
        if os.path.exists("./ckpt/checkpoint"):
            saver.restore(sess,"./ckpt/model")
        # #循环训练,运行优化
        for i in range(200):
          sess.run(train_op)
          # 运行合并的tensor
          summary = sess.run(merged)
          filewriter.add_summary(summary,i)
          print("第%d次参数权重:%f,偏置为:%f" % (i,weight.eval(), bias.eval()))
        saver.save(sess,"./ckpt/model")
    return None

if __name__=="__main__":
       myregression()
原文地址:https://www.cnblogs.com/zhang12345/p/13073041.html