一,线性回归的模型:
y = w*x +b
二,训练原理
训练其实就是传入x 的值 和 对应的y值,通过训练w和b的值,使通过线性函数计算的y_值趋近y
三,训练步骤
1,定义参数
定义x特征值 占位符类型 x的值在运行的过程中进行动态传入
x = tf.placeholder(tf.float32)
#定义w 变量类型 一维
W = tf.Variable(tf.zeros([1]))
#定义b
b = tf.Variable(tf.zeros([1]))
#定义每次训练传入的目标值
y_ = tf.placeholder(tf.float32)
2.定义线性模型:
#线性模型 这里的y是每次训练得到的目标值
y = W * x +b
3.计算每次训练的损失值:
#计算每次训练的丢失值 使用均方误差进行定损 使用(目标值-训练目标值)求方差的平均值
lost = tf.reduce_mean(tf.square(y_ - y))
各种算法定损的方法:
算法 | 定损方法 | 优化 |
---|---|---|
线性回归 | 均方误差 | 梯度下降 |
逻辑回归 | 对数似然损失 | 梯度下降 二分类 |
神经网络 | 交叉熵损失 | 反向传播算法(梯度下降) |
4.优化函数
#优化函数 优化函数代表我们要通过什么方式去优化我们需要学习的值,即优化更改我们要学习的w和b让学习结果和线性结果趋于相同 这里我们采用梯度下降
的函数
#后面传入的值是学习效率。一般是一个小于1的数。越小收敛越慢,但并不是越大收敛越快,取值太大甚至可能不收敛了。
optimizer = tf.train.GradientDescentOptimizer(0.0000001)
#这里填写我们每次训练的目的 即我们是通过优化函数的对象optimizer进行减小lost的值
train_step = optimizer.minimize(lost)
四,打开session开始训练
#打开一个session
with tf.Session() as sess:
#在session下初始化 所有的变量
init = tf.global_variables_initializer()
sess.run(init)
#训练的次数
steps = 1000
for i in range(steps):
#模拟传入训练数据
#每次训练传入的数据x的列表
xs = [i]
#y的列表
ys = [3 * i]
#构造传参列表
feed = {x: xs, y_: ys}
#运行 传入训练目的 和变量列表
sess.run(train_step, feed_dict=feed)
if i % 100 == 0:
print("经过 %d 训练:" % i)
print("W: %f" % sess.run(W))
print("b: %f" % sess.run(b))
print("lost: %f" % sess.run(lost, feed_dict=feed))
五,案例演示:
#coding:utf-8
##线性回归
#各种算法定损的方法
#算法 定损方法 优化
#线性回归 均方误差 梯度下降
#逻辑回归 对数似然损失 梯度下降 二分类
#神经网络 交叉熵损失 反向传播算法(梯度下降)
import tensorflow as tf
#线性回归的模型:
#y = w*x + b
#训练其实就是传入x 的值 和 y对应的值,通过训练w和b的值,使通过线性函数计算的y_值趋近y
#定义x特征值 占位符类型 x的值在运行的过程中进行动态传入
x = tf.placeholder(tf.float32)
#定义w 变量类型 一维
W = tf.Variable(tf.zeros([1]))
#定义b
b = tf.Variable(tf.zeros([1]))
#定义每次训练传入的目标值
y_ = tf.placeholder(tf.float32)
#线性模型
y = W * x +b
#计算每次训练的丢失值 使用均方误差进行定损
lost = tf.reduce_mean(tf.square(y_ - y))
#优化函数 优化函数代表我们要通过什么方式去优化我们需要学习的值,即优化更改我们要学习的w和b让学习结果和线性结果趋于相同 这里我们采用梯度下降的函数
#后面传入的值是学习效率。一般是一个小于1的数。越小收敛越慢,但并不是越大收敛越快,取值太大甚至可能不收敛了。
optimizer = tf.train.GradientDescentOptimizer(0.0000001)
#这里填写我们每次训练的目的 即我们是通过优化函数的对象optimizer进行减小lost的值
train_step = optimizer.minimize(lost)
#打开一个session
with tf.Session() as sess:
#在session下初始化 所有的变量
init = tf.global_variables_initializer()
sess.run(init)
#训练的次数
steps = 1000
for i in range(steps):
#模拟传入训练数据
#每次训练传入的数据x的列表
xs = [i]
#y的列表
ys = [3 * i]
#构造传参列表
feed = {x: xs, y_: ys}
#运行 传入训练目的 和变量列表
sess.run(train_step, feed_dict=feed)
if i % 100 == 0:
print("经过 %d 训练:" % i)
print("W: %f" % sess.run(W))
print("b: %f" % sess.run(b))
print("lost: %f" % sess.run(lost, feed_dict=feed))