Tensorflow之单变量线性回归问题的解决方法
Posted lsm-boke
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tensorflow之单变量线性回归问题的解决方法相关的知识,希望对你有一定的参考价值。
跟着网易云课堂上面的免费公开课深度学习应用开发Tensorflow实践学习,学到线性回归这里感觉有很多需要总结,梳理记录下阶段性学习内容。
题目:通过生成人工数据集合,基于TensorFlow实现y=2*x+1线性回归
使用Tensorflow进行算法设计与训练的核心步骤
(1)准备数据
(2)构建模型
(3)训练模型
(4)进行预测
#线性回归问题 #******************一、准备数据:********************** #生成人工数据集 # 在Jupter中,使用matplotlib显示图像需要设置为inline模式,否则不会显示图像 %matplotlib inline import matplotlib.pyplot as plt #载入matplotlib,用于绘图 import numpy as np #载入numpy,numpy是Python进行科学计算时的基础模块 import tensorflow as tf #载入Tensorflow #设置随机种子。训练之后结果随机,随机种子起到固定初始值的作用,为了训练之后得到一样的结果 np.random.seed(5) #直接采用np生成等差数列的方法,生成100个点,每个点的取值在-1~1之间 x_data = np.linspace(-1,1,100) # y = 2x +1 + 噪声,其中,噪声的维度与x_data一致 y_data = 2 * x_data + 1.0 + np.random.randn(*x_data.shape) * 0.4 #***********************二、构建线性模型************************* #定义训练数据的占位符,x是特征,y是标签值 x = tf.placeholder("float",name= "x") y = tf.placeholder("float",name = "y") #定义模型函数 def model(x,w,b): return tf.multiply(x,w) + b #定义模型结构 #Tensorflow变量的声明函数是tf.Variable。tf.Variable的作用是保存和更新函数,变量的初始值可以是随机数、常数,或是通过其他变量的初始值计算得到 #构建线性函数的斜率,变量w w = tf.Variable(1.0,name = "w0") #构建线性函数的截距,变量b b = tf.Variable(0.0,name = "b0") #pred是预测值,前向计算 pred = model(x,w,b) #************************三、训练模型******************************* #设置训练参数 #迭代次数(训练轮数) train_epochs = 10 #学习率 learning_rate = 0.05 #定义优化器、最小损失函数 #定义损失函数,损失函数用于描述预测值与真实值之间的差别,从而指导模型收敛方向。常见损失函数:均方差、交叉熵 #采用均方差作为损失函数 loss_function = tf.reduce_mean(tf.square(y-pred)) #定义优化器 #定义优化器Optimizer,初始化一个GradientDescentOptimizer(梯度下降优化器) #设置学习率和优化目标:最小化损失 optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss_function) #创建会话 #声明会话 sess = tf.Session() #变量初始化 #在真正执行计算前,需要将所有变量初始化。通过tf.global_variables_initializer函数可实现对所有变量的初始化 init = tf.global_variables_initializer() sess.run(init) #迭代训练 #模型训练阶段,设置迭代轮次,每次通过将样本逐个输入模型,进行梯度下降优化操作。每轮迭代后,绘制出模型曲线 #开始训练,轮次为epoch,采用SGD随机梯度下降优化方法 for epoch in range(train_epochs): for xs,ys in zip(x_data,y_data): _,loss = sess.run([optimizer,loss_function],feed_dict={x:xs,y:ys}) b0temp = b.eval(session=sess) w0temp = w.eval(session=sess) plt.plot(x_data,w0temp * x_data + b0temp) #画图 #结果查看。当训练完成后,打印查看参数。数据每次运行都可能会有所不同 print("w:",sess.run(w)) #w的值应该在2附近 print("b:",sess.run(b)) #b的值应该在1附近 #结果可视化 plt.scatter(x_data,y_data,label=‘Original data‘) plt.plot(x_data,x_data*sess.run(w) + sess.run(b),label=‘Fitted line‘,color=‘r‘,linewidth=3) plt.legend(loc=2) #通过参数loc指定图例位置 #*********************四、利用学习到的模型进行预测******************* x_test = 3.21 predict = sess.run(pred,feed_dict={x:x_test}) print("预测值: %f"%predict) target = 2 * x_test + 1.0 print("目标值: %f"%target)
题目二:通过生成人工数据集合,基于TensorFlow实现y=3.1234*x+2.98线性回归
# 在Jupter中,使用matplotlib显示图像需要设置为inline模式,否则不会显示图像 %matplotlib inline import matplotlib.pyplot as plt #载入matplotlib import numpy as np #载入numpy import tensorflow as tf #载入Tensorflow #设置随机种子 np.random.seed(5) #直接采用np生成等差数列的方法,生成100个点,每个点的取值在-1~1之间 x_data = np.linspace(-1,1,100) # y = 3.1234x +2.98 + 噪声, 其中, 噪声的唯度与x_data一致 y_data = 3.1234*x_data + 2.98 + np.random.randn(*x_data.shape)*0.4 x = tf.placeholder("float",name = "x") y = tf.placeholder("float",name = "y") def model(x,w,b): return tf.multiply(x,w)+b # 构建线性函数的斜率, 变量w w = tf.Variable(1.0,name="w") # 构建线性函数的截距,变量b b = tf.Variable(0.0, name="b0") #pred是预测值,前向计算 pred = model(x,w,b) # 迭代次数(训练轮数) train_epochs = 10 # 学习率 learning_rate = 0.05 # 采用均方差作为损失函数 loss_function = tf.reduce_mean(tf.square(y-pred)) # 梯度下降优化器 optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss_function) sess = tf.Session() init = tf.global_variables_initializer() sess.run(init) # 开始训练,轮数为 epoch,采用SGD随机梯度下降优化方法 #zip为组装,x,y都为一维数组. zip 把x,y组装起来也为一维数组,每个单元为(x,y) for epoch in range(train_epochs): for xs,ys in zip(x_data, y_data): #优化器给了一个下划线,loss_function 给了loss _, loss=sess.run([optimizer,loss_function],feed_dict={x: xs, y:ys}) plt.scatter(x_data,y_data,label=‘Original data‘) plt.plot(x_data,x_data*sess.run(w)+sess.run(b), label=‘Fitted line‘,color=‘r‘,linewidth=3) plt.legend(loc=2)#通过参数loc指定图例位置 print("w: ", sess.run(w)) #w的值应该在3.1234附近 print("b: ",sess.run(b)) #b的值应该在2.98附近
以上是关于Tensorflow之单变量线性回归问题的解决方法的主要内容,如果未能解决你的问题,请参考以下文章