深度学习:Tensorflow实现线性回归梯度下降优化
回顾
1、算法:线性回归
y = k x + b y = kx + b y=kx+b
2、策略:均方误差
3、优化:梯度下降
步骤
1、准备好特征值和目标值
2、建立模型,随机初始化准备权重w和偏置b
y _ p r e d i c t = x w + b y\_predict = xw + b y_predict=xw+b
3、求损失函数,误差,均方误差
m
s
e
=
(
y
1
−
y
1
−
)
2
+
(
y
2
−
y
2
−
)
)
2
n
mse = \frac{(y1-y1^-)^2 + (y2-y2^-))^2 }{n}
mse=n(y1−y1−)2+(y2−y2−))2
4、梯度下降去优化损失过程,指定学习率
矩阵相乘
(m行,n列) * (n 行, 1列) = (m行, 1列) + 偏置
TensorFlow运算API
# 矩阵运算
tf.matmul(x, w)
# 平方
tf.square(error)
# 均值
tf.reduce_mean(error)
梯度下降API
tf.train.GradientDescentOptimizer(learning_rate)
参数:
learning_rate 学习率
方法:
minimize(loss)
return 梯度下降op
tips:模型参数必须用变量定义
代码实现
# -*- coding: utf-8 -*-
"""
实现一个线性回归预测
"""
import tensorflow as tf
# 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
# 2、建立线性回归模型 1个特征,1个权重,1个偏置 y = xw + b
# 随机给一个权重和偏置的值,让他们去计算损失,然后在当前状态下优化
# 用变量定义才能优化
weight = tf.Variable(tf.random_normal([1, 1], mean=0.0, stddev=1.0), name="weight")
bias = tf.Variable(0.0, name="bias")
y_predict = tf.matmul(x, weight) + bias
# 3、建立损失函数,均方误差
loss = tf.reduce_mean(tf.square(y_true - y_predict))
# 4、梯度下降优化损失,学习率learn_rate 0,1,2,3,5,7,10
train_op = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
# 定义一个初始化变量的op
init_op = tf.global_variables_initializer()
# 通过会话运行程序
with tf.Session() as sess:
# 初始化变量
sess.run(init_op)
# 打印随机最先初始化的权重和偏置
print("初始化的参数权重:{}, 偏置:{}".format(weight.eval(), bias.eval()))
# 运行优化
for i in range(200):
sess.run(train_op)
print("第 {} 次优化 参数权重:{}, 偏置:{}".format(i, weight.eval(), bias.eval()))
计算结果
初始化的参数权重:[[0.313286]], 偏置:0.0
第 0 次优化 参数权重:[[0.86829025]], 偏置:0.2980913817882538
第 1 次优化 参数权重:[[0.9330569]], 偏置:0.3393169939517975
第 2 次优化 参数权重:[[0.9391256]], 偏置:0.34980931878089905
第 3 次优化 参数权重:[[0.9435929]], 偏置:0.35885265469551086
...
第 197 次优化 参数权重:[[0.7236507]], 偏置:0.7558320760726929
第 198 次优化 参数权重:[[0.7237728]], 偏置:0.7565979361534119
第 199 次优化 参数权重:[[0.72236484]], 偏置:0.7566843032836914
计算越多,计算结果越接近真实值
相关文章
- 数据透视表上线!如何在纯前端实现这个强大的数据分析功能?
- 大气科学中的机器学习应用
- 【深度学习系列】卷积神经网络CNN原理详解(一)——基本原理
- JVM 学习笔记(3):HotSpot 算法实现的细节
- CSS3与页面布局学习总结(四)——页面布局的多种方法
- zabbix入门学习
- 机器学习——决策树模型:Python实现
- 【深度学习项目一】全连接神经网络实现mnist数字识别
- JavaScript 学习-50.实现页面菜单拖放(Drag 和 Drop)
- 机器学习里的bias的一些处理方法和思考
- Beego学习——实现用户登录登出
- 【机器学习入门与实践】合集入门必看系列,含数据挖掘项目实战
- 使用LibSVM在Linux下实现机器学习(libsvmlinux)
- 深入Linux,深度学习你的未来(linux学习要求)
- 深度学习实践:如何使用Tensorflow实现快速风格迁移?
- Linux培训班:从零开始学习Linux技能(linux 培训班)
- 学习Linux脚本编程,实现你的编程梦想(linux的脚本怎么编写)
- MySQL使用视频:学习实现数据库操作能力(mysql的使用视频)
- AI=机器学习²,我们在去往²的路上 | 普林斯顿范剑青教授
- 联邦学习新时代即将到来?同盾科技FLEX协议开源!
- javascript学习(二)javascript常见问题总结