import tensorflow as tf
def Linear_regression():
"""
实现一个线性回归
"""
#1 准备数据
x = tf.random_normal(shape=[100,1])
y_true = tf.matmul(x,[[0.8]])+0.7
#2 构建模型
#定义模型参数 用 变量 若设置参数trainable=False,则训练过程中参数值不变
weight = tf.Variable(initial_value=tf.random_normal(shape=[1,1]))
bias = tf.Variable(initial_value=tf.random_normal(shape=[1,1]))
y_predict = tf.matmul(x,weight)+bias
#3 构建损失函数
error = tf.reduce_mean(tf.square(y_predict-y_true))
#4 优化损失
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01).minimize(error)
#初始化变量
init = tf.global_variables_initializer()
#开启会话
with tf.Session() as sess:
#初始化变量
sess.run(init)
#查看初始化模型参数之后的值
print("训练前模型参数为:权重%f,偏置%f,损失为%f"%(weight.eval(),bias.eval(),error.eval()))
#开始训练
for i in range(1000):
sess.run(optimizer)
#print放循环里面查看迭代过程
print("第%d次训练后训练前模型参数为:权重%f,偏置%f,损失为%f" % (i+1,weight.eval(), bias.eval(), error.eval()))
return None
if __name__=="__main__":
Linear_regression()
还通过实验发现训练次数不变,学习率越大,训练速度越快,效果越好;但学习率不能太大,一搬取0.01~0.1都适合,当过大时会发生梯度爆炸!