学习八
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()