tensorflow入门(六)

简单的线性回归

前面五篇都是很基础的。很没有趣味。这一篇我就写一个最简单的线性回归的小小例子。只有是是十几行代码

废话不多说。

import tensorflow as tf
#1 准备数据

x = tf.random_normal(shape=[100,1])

y_1 = tf.matmul(x,[[0.8]]) + 0.7

#2 构造模型
weights = tf.Variable(initial_value=tf.random_normal(shape=[1,1]))
bias = tf.Variable(initial_value=tf.random_normal(shape=[1, 1]))
y_2 = tf.matmul(x,weights) + bias

#3 构造损失函数
error = tf.reduce_mean(tf.square(y_2 - y_1))

#4 优化损失

optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.1).minimize(error)
#变量初始化
init = tf.global_variables_initializer()

#开启会话
with tf.Session() as sess:
	#初始化变量
	sess.run(init)

	print('训练前模型参数:权重%f,偏重%f,损失%f' %(weights.eval(), bias.eval(), error.eval()))
	print('*' * 30)
	#开始训练
	for i in range(100):

		sess.run(optimizer)
		
		print('%f次参数:权重%f,偏重%f,损失%f' %(i,weights.eval(), bias.eval(),error.eval()))

显示结果
在这里插入图片描述

代码说明

x = tf.random_normal(shape=[100,1])

随机生成的谢数据。

y_1 = tf.matmul(x,[[0.8]]) + 0.7

是一个矩阵乘法x乘以0.8在家0.7

weights = tf.Variable(initial_value=tf.random_normal(shape=[1,1]))

bias = tf.Variable(initial_value=tf.random_normal(shape=[1, 1]))

定义的两个变量。分别是权重和偏置。我们是initial_value=是确定初始化值

机器学习就是在不断的迭代。不断有优化变量。以达到和目标值

y_2 = tf.matmul(x,weights) + bias

和上面一句的差不多。也是一个矩阵乘法在加上一个数。

但是weights,和bias都只有一个初始值。在本例子中就是经过不断的迭代,使weights接近0.8,bias接近0.7.由于本例很简单。最后进过不断迭代后。weights=0.8,bias=0.7

error = tf.reduce_mean(tf.square(y_2 - y_1))

这一句就是损失函数。

tf.square(y_2 - y_1)
就是y_2 - y_1的平方

optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.1).minimize(error)

是梯度下降法。还有很多方法。。根据具体情况而定。可以参考官方文档

优化损失。learning_rate=0.1是学习率

学习率如果太小训练就很慢。
如果太大。就会造成管道破裂。不能训练。
==minimize(error)==就是你要优化的对象

for i in range(100):

		sess.run(optimizer)
		print('%f次参数:权重%f,偏重%f,损失%f' %(i,weights.eval(), bias.eval(),error.eval()))

这一段就是训练。我们的训练次数是100次

sess.run(optimizer)

是不是感觉神奇怪不可思议。我们并没有对weights 和** bias进行迭代,为什么训练结果就是weights** 和** bias**在不断的迭代和改变

我们每训练一次就有实例化一次optimizer

然而optimizer就是优化的损失,优化的是error

errortf.reduce_mean(tf.square(y_2 - y_1))

其中就用到了。y_2 - y_1

y_1我们确定了的。来自** tf.matmul(x,[[0.8]]) + 0.7**
但是 y_2我们确定了的。来自** tf.matmul(x,weights) + bias**。到这里我们才用到了weightsbias

然后每一次迭代。都会有一个weightsbias的值。

迭代的次数多了就不断的接近我们0.8和0.7

==print(’%f次参数:权重%f,偏重%f,损失%f’ %(i,weights.eval(), bias.eval(),error.eval()))已经在会话中了。我们在看weights,bias,error的值只需要.eval()==就可以了。
不能在开启会话。因为已经开启会话了。

很晚了。下一节我在介绍模型保存和加载。希望对你有一丢丢用。以上代码都是我子手敲的。可以运行的。我差不多是训练了45次基本接近目标值了。欢迎转载。

猜你喜欢

转载自blog.csdn.net/weixin_43039354/article/details/86486391