#线性回归是什么
y = w1x1 + w2x2 + w3x3 + w4x4 + ... + w_nx_n + bias
算法:线性回归
策略:均方误差
优化:梯度下降算法(需要设置学习率)
#训练过程
1、准备好特征和目标值,例子用广告投入与销量之间的关系
这里准备特征值100个[100,1]
用y = x*0.7 + 0.8a计算出目标值[100,1]
2、建立模型(画图)
注:给n个特征,那么需要设置n个权重,一个偏置
这里准备一个权重w,一个偏执b(随机初始化)
3、求预测结果、计算损失
y_predict = x*w + b
损失函数loss = ((y1-y1')^2 + ... + (y100-y100')^2)/100
4、梯度下降减小损失,优化参数,指定学习率
#实现线性回归需要的API
矩阵相乘tf.matmul(x,w)
平方tf.square()
均值tf.reduce_mean()
梯度下降tf.train.GradientDescentOptimizer(learning_rate,method = minmum(loss),返回op
#模型参数必须用Varialbe定义
#梯度爆炸问题
1、重新设计网络
2、调整学习率
3、使用梯度截断
4、使用激活函数
#线性回归问题代码:
def myregression():
"""
实现线性回归预测
return: None
"""
#1、准备好特征和目标值
x = tf.random_normal([100,1],mean = 10,stddev = 2,name = 'input_data_x')
y_true = tf.matmul(x,[[0.7]]) + 0.8
#2、建立回归模型,1个特征,1个权重
w = tf.Variable(tf.random_normal([1,1],mean = 0.0,stddev = 1.0),name = 'weight')
b = tf.Variable(0.0,name='bias')
y_predict = tf.matmul(x,w) + b
loss = tf.reduce_mean(tf.square(y_true-y_predict))
#4、梯度下降算法优化损失
train_op = tf.train.GradientDescentOptimizer(0.006).minimize(loss)
#定义变量初始化op
init_op = tf.global_variables_initializer()
tf.summary.histogram("input_x",x)
merge_op = tf.summary.merge_all()
#通过会话运行训练过程
with tf.Session() as sess:
#初始化变量
sess.run(init_op)
for i in range(30000):
sess.run(train_op)
print("after %d times of training w&b is %f %f"%(i,w.eval(),b.eval()))
import tensorflow as tf
if __name__ == "__main__":
myregression()
#经验:
如果发生了梯度爆炸,即参数结果出现了nan,则是学习率太大,这时需要调整学习率;同时,数据的质量对结果的影响也很大