【机器学习】Tensorflow做线性拟合
程序员文章站
2024-03-15 13:48:29
...
Tensorflow做线性拟合,有点大炮打苍蝇的赶脚。不过测试一下,熟悉熟悉Tensorflow也何尝不可
Tensorflow构建模型一般分为一下步骤
1. 设置权重(W)及偏执(b)
#创建变量
#tf.random_normal([1])返回一个符合正太分布的随机数
W=tf.Variable(tf.random_normal([1],name='weight')) # 权重,由于线性拟合是 一维且线性,在此权值设置一个即可
b=tf.Variable(tf.random_normal([1],name='bias')) # 偏执参数是必须的,作为整体调整的参数
2. 设置占位符(也可以当做是输入输出通道,主要是参数类型以及矩阵维度)
X = tf.placeholder(tf.float32,[None,1]) #指的是输入
Y = tf.placeholder(tf.float32,[None,1]) #指的是输出
[None,1]意思是:n行一列的矩阵,例如:[[1],[2],[3],[4]]
3. 定义损失函数(代价函数)
loss = tf.reduce_sum(tf.pow(tf.multiply(W,X) + b - Y,2.0))
损失函数主要为优化目标服务,也就是【真实情况-输出情况平方求和】,
4. 定义优化器
optimizer = tf.train.AdamOptimizer(1).minimize(loss)
优化器可以理解为优化到目标的方式,优化器有很多种,目的都是一样的,既【是的损失函数最小、或者可以说,输出结果尽可能等于真实结果】
5. 开始训练
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for step in range(200): #一千次迭代
sess.run(optimizer,feed_dict={X:x.reshape(-1,1),Y:y.reshape(-1,1)})
创建session,初始化,迭代训练,,其具体含义日后会有详解,此处不做详解
完整代码如下:
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
#生成模拟数据,进行测试
x = np.array(np.arange(100) ,dtype=np.float32)
y = np.array(np.arange(100) ,dtype=np.float32)#此时X和Y其实是相等的,后面加入随机值,尽可能真实模拟实际情况
y +=(np.random.random_sample(100) * 20)# *20指的是,上波动10
y -=20 #下降20,,,y = x+b --> y = x - 10
print(y[:20])#查看前20列
#设置权重 创建变量
#tf.random_normal([1])返回一个符合正太分布的随机数
W=tf.Variable(tf.random_normal([1],name='weight')) # 权重,由于线性拟合是 一维且线性,在此权值设置一个即可
b=tf.Variable(tf.random_normal([1],name='bias')) # 偏执参数是必须的,作为整体调整的参数
#添加占位符
X = tf.placeholder(tf.float32,[None,1]) #指的是输入
Y = tf.placeholder(tf.float32,[None,1]) #指的是输出
#构造损失函数
loss = tf.reduce_sum(tf.pow(tf.multiply(W,X) + b - Y,2.0)) #此处对所有的y-kx-b进行平方求和
#添加优化器
optimizer = tf.train.AdamOptimizer(1).minimize(loss)
#注:递归下降分析法,对于输入参数需要归一化,否则会出现训练异常
# optimizer = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
#开始训练
save_step_loss = {"step":[],"loss":[]}# 保存step和loss用于可视化操作
line_k = 0 #保存k
line_b = 0 #保存b
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for step in range(200): #一千次迭代
sess.run(optimizer,feed_dict={X:x.reshape(-1,1),Y:y.reshape(-1,1)})
print("step:",step,
"loss: ",sess.run(loss,feed_dict={X:x.reshape(-1,1),Y:y.reshape(-1,1)}),
"W:",sess.run(W),
"b:",sess.run(b))
save_step_loss["step"].append(step)
save_step_loss["loss"].append(sess.run(loss,feed_dict={X:x.reshape(-1,1),Y:y.reshape(-1,1)}))
line_k = sess.run(W)
line_b = sess.run(b)
#画图损失函数变化曲线
plt.plot(save_step_loss["step"],save_step_loss["loss"])
plt.show()
#画预测直线,及其离散点分布情况
#plt.scatter(x,y,5,c="r")
#plt.plot([0,100],[0 * line_k + line_b , 100 * line_k + line_b])
#plt.show()
显示可视化的结果,,
【损失函数变化曲线】
【画预测直线,及其离散点分布情况】
上一篇: LED点阵
下一篇: 1051 LeetCode 高度检查器
推荐阅读
-
【机器学习】Tensorflow做线性拟合
-
Tensorflow学习笔记-过度拟合问题
-
Kaggle教程 机器学习入门5 欠拟合与过拟合
-
学习《吴恩达:机器学习》作业一线性回归中的matrix和array
-
机器学习里的Hello World——TensorFlow 2.0在MNIST数据集上的尝试
-
《Hands-On Machine Learning with Scikit-Learn & TensorFlow》读书笔记 第二章 机器学习项目
-
机器学习+python --多元线性回归模型
-
深入了解机器学习:线性回归
-
Spark ML机器学习算法svm,als,线性回归,逻辑回归简单试验
-
机器学习速成课程 | 练习 | Google Development——编程练习:(TensorFlow) Hello World