1.TensorFlow初识 TF实现线性回归模型
来源:互联网 发布:数据库服务器cpu 要求 编辑:程序博客网 时间:2024/05/18 22:10
TensorFlow基本使用
在介绍样例之前,我们先介绍一下TensorFlow的一些基本概念
1.placehoder(占位符)
tf.placeholder(dtype, shape=None, name=None)Args: dtype: The type of elements in the tensor to be fed. shape: The shape of the tensor to be fed (optional). If the shape is not specified, you can feed a tensor of any shape. name: A name for the operation (optional).
dytpe:占位符的数据类型
shape:占位符的纬度,例如[2,2]代表2x2的二维矩阵,None可以代表任意维度,例如[None,2]则代表任意行数,2列的二维矩阵
name:占位符的名字
变量在定义时要初始化,但可能有些变量我们一开始定义的时候并不一定知道该变量的值,只有当真正开始运行程序的时候才由外部输入,比如我们需要训练的数据,所以就用占位符来占个位置,告诉TensorFlow,等到真正运行的时候再通过输入数据赋值。
例如
x = tf.placeholder(tf.float32, [2, 2])
就是生成了一个2x2的二维矩阵,矩阵中每个元素的类型都是tf.float32(也就是浮点型)。
有时候定义需要训练的参数时候,会定义一个[input_size,output_size]大小的矩阵,其中input_size数输入数据的维度,output_size是输出数据的维度
2.Variable(变量)
官方说明 有些长,我就不引用啦,这里介绍一个简单的用法,有一点变量在声明的时候要有一个初始值
x = tf.Variable(tf.zeros([2,2])) # 声明一个2x2的矩阵,并将矩阵中的所有元素的值赋为0,默认每个元素都是tf.float32类型的数据y = tf.Variable(1.0, tf.float32) # 声明一个tf.float32的变量,并将初始值设为1.0
我们一般还需要运行下global_variables_initializer真正在TensorFlow的Session中初始化所有变量,后面的样例中也会有体现。
3.Constant(常量)
官方说明 同样不引用啦,这里介绍一个简单的用法
x = tf.constant(3.0, tf.float32) # 定义一个值为3.0的浮点型常量
4.Session(会话)
TensorFlow所有的操作都必须在Session中运行,才能真正起作用,可以将Session当作TensorFlow运行的环境,Session运行完需要close~
#用close()关闭sess = tf.Session()sess.run(...)sess.close()#使用with..as..语句关闭with tf.Session() as sess: sess.run(...)
5.简单使用
我们介绍下3+5应该如何在TensorFlow中实现
import tensorflow as tfx = tf.Variable(3, tf.int16) // 声明一个整型变量3y = tf.Variable(5, tf.int16) // 声明一个整型变量5z = tf.add(x,y) // z = x + yinit = tf.global_variables_initializer() // 初始化变量的操作with tf.Session() as sess: sess.run(init) // 在Session中初始化变量 print(sess.run(z)) // 输出计算出的z值
样例
Github上有一个比较好的Demo合集,有注释有源代码还蛮好的,但今天我们不讲上面的代码,我们讲如何用TF实现线性回归模型。
所谓线性回归模型就是y = W * x + b的形式的表达式拟合的模型。
我们如果想通过深度学习拟合一条直线 y = 3 * x 应该怎么做呢?咱不讲虚的先展示下代码!然后我们在逐步分析。
#coding=utf-8import tensorflow as tfx = tf.placeholder(tf.float32)W = tf.Variable(tf.zeros([1]))b = tf.Variable(tf.zeros([1]))y_ = tf.placeholder(tf.float32)y = W * x + blost = tf.reduce_mean(tf.square(y_-y))optimizer = tf.train.GradientDescentOptimizer(0.0000001)train_step = optimizer.minimize(lost)sess = tf.Session()init = tf.global_variables_initializer()sess.run(init)steps = 1000for i in range(steps): xs = [i] ys = [3 * i] feed = { x: xs, y_: ys } sess.run(train_step, feed_dict=feed) if i % 100 == 0 : print("After %d iteration:" % i) print("W: %f" % sess.run(W)) print("b: %f" % sess.run(b)) print("lost: %f" % sess.run(lost, feed_dict=feed))
1.先导入需要使用的python库。
#coding=utf-8import tensorflow as tf
毕竟是基于TensorFlow的,那我们肯定要导入TensorFlow滴,导入之后取个别名tf,之后用起来方便些。
2.定义需要的变量,我们看看y = W * x + b中都有哪些变量。
x = tf.placeholder(tf.float32)W = tf.Variable(tf.zeros([1]))b = tf.Variable(tf.zeros([1]))y_ = tf.placeholder(tf.float32)
x:我们训练时需要输入的真实数据x
W: 我们需要训练的W,这里我们定义了一个1维的变量(其实吧,就是一个普普通通的数,直接用tf.float32也行)并将其初值赋为0
b : 我们需要训练的b,定义一个1维变量,并将其初值赋为0
y_ :我们训练时需要输入的x对应的y
3.定义线性模型
y = W * x + b
4.定义损失函数和优化方法
lost = tf.reduce_mean(tf.square(y_-y))optimizer = tf.train.GradientDescentOptimizer(0.0000001)train_step = optimizer.minimize(lost)
lost = tf.reducemean(tf.square(y- y))
损失函数(Lost Function)是用来评估我们预测的值和真实的值之间的差距是多少,损失函数有很多种写法,我们这里使用(y预测-y真实)^2再取平均数来作为我们的损失函数(用这个函数是有原因的,因为我们用的是梯度下降法进行学习)损失函数的值越小越好,有些教程也叫Cost Function
optimizer = tf.train.GradientDescentOptimizer(0.0000001)
优化函数代表我们要通过什么方式去优化我们需要学习的值,这个例子里指的是W和b,优化函数的种类有很多,大家到官网查阅,平时我们用的比较多的是GradientDescentOptimizer和AdamOptimizer等,这里我们选用最常用也是最最基本的GradientDescentOptimizer(梯度下降),后面传入的值是学习效率。一般是一个小于1的数。越小收敛越慢,但并不是越大收敛越快哈,取值太大甚至可能不收敛了。。。
我们简单介绍下什么是梯度下降,梯度顾名思义就是函数某一点的导数,也就是该点的变化率。梯度下降则顾名思义就是沿梯度下降的方向求解极小值。
详细解释大家可以自行谷歌一下~当然可以可以看这篇文章,当然由于性能的原因梯度下降有很多种变种,例如随机梯度下降 (Stochastic Gradient Descent),小批梯度下降 (Mini-Batch Gradient Descent)。本文样例采用的是SGD,每次只输入一个数据。
train_step = optimizer.minimize(lost)
这个代表我们每次训练迭代的目的,本例我们的目的就是尽量减小lost的值,也就是让损失函数的值尽量变小
5.变量初始化
sess = tf.Session()init = tf.global_variables_initializer()sess.run(init)
这个之前有所介绍了,我们需要在Session中真正运行下global_variables_initializer才会真正初始化变量。
6.开始训练
steps = 1000for i in range(steps): xs = [i] ys = [3 * i] feed = { x: xs, y_: ys } sess.run(train_step, feed_dict=feed) if i % 100 == 0 : print("After %d iteration:" % i) print("W: %f" % sess.run(W)) print("b: %f" % sess.run(b)) print("lost: %f" % sess.run(lost, feed_dict=feed))
我们定义一个训练迭代次数1000次。
这里我们图方便,每次迭代都直接将i作为x,3*i作为y直接当成训练数据。
我们所有通过placeholder定义的值,在训练时我们都需要通过feed_dict来传入数据。
然后我们每隔100次迭代,输出一次训练结果,看看效果如何~
After 0 iteration:W: 0.000000b: 0.000000lost: 0.000000After 100 iteration:W: 0.196407b: 0.002951lost: 78599.671875After 200 iteration:W: 1.249361b: 0.009867lost: 122582.625000After 300 iteration:W: 2.513344b: 0.015055lost: 21310.636719After 400 iteration:W: 2.960238b: 0.016392lost: 252.449890After 500 iteration:W: 2.999347b: 0.016484lost: 0.096061After 600 iteration:W: 2.999971b: 0.016485lost: 0.000001After 700 iteration:W: 2.999975b: 0.016485lost: 0.000001After 800 iteration:W: 2.999978b: 0.016485lost: 0.000001After 900 iteration:W: 2.999981b: 0.016485lost: 0.000000
可以看到在迭代了500次之后效果就很好了,w已经达到2.999347很接近3了,b也达到了0.016484也比较接近0了,因为这里学习率选择的比较小,所以收敛的比较慢,各位也可以尝试调大学习率,看看收敛的速度有何变化。
- 1.TensorFlow初识 TF实现线性回归模型
- TensorFlow 实现一元线性回归模型
- TensorFlow学习笔记(二):TensorFlow实现线性回归模型
- tensorflow 实现线性回归
- Tensorflow实现线性回归
- Tensorflow实现线性回归
- TensorFlow实现线性回归
- 学习TensorFlow,线性回归模型
- Keras上基于TensorFlow实现简单线性回归模型
- Tensorflow学习笔记(一):初识TensorFlow——实现线性回归
- tensorflow线性回归(caffe model转tf)
- 用tensorflow构建线性回归模型
- 基于tensorflow的线性回归模型
- 2.tensorflow 线性回归模型 matplot显示
- Tensorflow实现逻辑回归模型
- tensorflow tutorials(一):用tensorflow建立线性回归模型
- TensorFlow实现一元线性模型
- tensorflow实现线性回归的完整程序
- MFC将一个位图添加到数据库中并且将其读出来到指定的Picture控件上
- Cocos Creator 实现按钮图标的流光特效(Shader)
- 机房运维的一些目前对竞价商城防御DDOS攻击处理方案
- Android标题栏ToolBar详解
- Leetcode问题解答:4. Median of Two Sorted Arrays
- 1.TensorFlow初识 TF实现线性回归模型
- JAVA获取当前系统时间System.currentTimeMillis()
- Oracle存储过程中CRUD的使用
- vue使用px2rem
- 第二周项目(2)-程序的多文件组织
- ssh keys管理工具
- MenuItemFont字体设置bug的解决方法
- java-captcha实现验证码
- leetcode 105. Construct Binary Tree from Preorder and Inorder Traversal