基于TensorFlow的线性回归模拟及Python实现

2018-11-17 02:35:22刘玉坤邢立国
现代计算机 2018年29期
关键词:梯度线性深度

刘玉坤,邢立国

(平顶山学院计算机学院(软件学院),平顶山 467000)

0 引言

在这个人工智能的时代,作为一个有理想抱负的程序员,或者学生、爱好者,不懂深度学习这个超热的话题,似乎已经跟时代脱节了[1]。深度学习目前已经成为了人工智能领域的突出话题。它因在“自然语言处理”、“人机博弈”、“语音识别”的卓越表现而闻名,甚至为人类所不及。当今对深度学习的关注度也在不断攀升。在诸多深度学习系统中,TensorFlow是一款最受欢迎学习系统[2]。在本文介绍了TensorFlow,描述了一个线性回归的案例及其Python实现。

1 TensorFlow简介

TensorFlow是2015年11月9日谷歌推出的开源机器学习框架,TensorFlow是由Jeff Dean为首的开发团队由第一代深度学习系统DistBilief改进而来的。但是对于大规模的神经网络训练要求更大的部署空间,DistBilief已力不从心,TensorFlow允许用户通过赋值和并行执行一个核心的模型数据流图来轻松实现多种并行度。其可以由许多不同的计算设备协作来更新一套共享参数或者其他状态。因此好多用户已经转向TensorFlow。这些用户依靠TensorFlow进行研究和生产,其任务多种多样,例如在手机上运行计算机视觉模型的推理,以及使用数百个示例记录对数千亿个参数进行深层神经网络的大规模训练。TensorFlow已经成为世界上最受欢迎的开源机器学习框架,它支持的语言有C++、Python,它具有快速、灵活并适合产品级大规模应用等特点,同时TensorFlow也支持多系统,主要的支持系统有 Linux、Mac OS X、Windows等,TensorFlow让每个开发者和研究者都能方便地使用人工智能来解决多样化的挑战[3]。

2 线性回归

在神经网络中,分类网络的最终层通常包含某种形式的逻辑回归算法,用于将连续数据转换为形如0和1的虚拟变量(例如,在飞行员的选拔中,根据一些学生的身高、体重和健康情况判断他们是否合格),而真正意义上的回归算法则用于将一组连续的输入映射至另一组连续的输出[3]。描述两个变量x和y之间关系的简单线性回归模型可以用下面的方程表示y=a+bx+e,数字a和b称为参数,e是误差项。在本次讨论中为了简化模型。设计线性模型如下,假设一个模型的输入y和xi满足一下关系,y=+b,模型的输出为输入的加权和。下面通过TensorFlow来实现一元的线性回归模型的训练,通过训练数据,推测出线性回归函数(y=w*x+b)中w和b的值,并通过验证数据,验证得到的函数是否符合预期。

3 Python实现

(1)模块引入

模块是Python中的一个重要概念,Python的程序是由一个个模块组成的。在使用一个模块的函数或类之前,首先要导入该模块[4]。首先引入TensorFlow模块,为了清晰了解训练结果,引入绘图表,引入测试数据模块(此模块代码从略)。

import tensorflow as tf matplotlib.pyplot as pyp testdata as td

(2)得到训练数据

通过testData来模拟第三方接口,getTrainData得到训练数据参数:dataLength(得到数据的个数),返回值:二维数组[0]代表 x(横坐标),[1]代表 y(纵坐标),getValidateData得到验证数据参数:dataLength得到数据的个数。

trainData=td.getTrainDate(200)

practice_x=[v[0]for v in trainData]

practice_y=[v[1]for v in trainData]

(3)构造预测的线性回归函数y=W*x+b

W=tf.Variable(tf.random_uniform([1]))

b=tf.Variable(tf.zeros([1]))

y=W*practice_x+b

cost=tf.reduce_mean(tf.square(y-practice_y))

(5)参数优化。学习率(learning_rate)可理解为每一次梯度下降的步长,一般设置学习率小于0.1,此处我们设置为0.08。当学习率过大时,可能导致参数在最低点附近来回震荡,始终到达不了最优点;当学习率过小时,前期梯度下降的速度极其慢,浪费时间。所以最优的方法是前期学习率设置大点,让梯度迅速下降,随后慢慢将学习率减小,以求达到最优点[5]。深度学习常见的是对于梯度的优化,也就是说,优化器最后其实就是各种对于梯度下降算法的优化。在本程序中我们使 用 了 tf.GradientDescentOptimizer(learning_rate)函数。一般在上面这个函数的后面还会加一个最小化代价函数,构成深度学习中的训练对象。在TensorFlow中调整假设函数,使用梯度下降算法找最优解。

optimizer=tf.train.GradientDescentOptimizer(0.08)train=optimizer.minimize(cost)

with tf.Session()as sessio∶#初始化所有变量值

init=tf.global_variables_initializer()

sessio.run(init) #初始化W和b的值

print("cost=",sessio.run(cost),"W=",sessio.run(W),"b=",sessio.run(b))

for k in range(500)∶#循环运行

sessio.run(train)

print("cost=",sessio.run(cost),"W=",sessio.run(W),"b=",sessio.run(b))输出 W 和 b

print("训练完成")

pyp.plot(practice_x,practice_y,'ro',label='train data')#构造图形结构

pyp.plot(practice_x,sessio.run(y),label='tain result')

pyp.legend()

pyp.show()

4 程序运行界面效果

该程序运行的结果效果如图1所示。通过图像显示,使用TensorFlow进行线性回归模拟求解很好地实现一次函数的参数模拟求解,并且使用该一次函数求值并且加上随机误差的点均匀地分布在直线附近。非常直观,见图1:

图1 效果模拟图

5 结语

本文首先介绍了TensorFlow,之后给出了线性回归的基本概念并利用TensorFlow实现了该模型,该算法可用于解决实际工作中的一些相关问题,具有一定的实际意义。掌握深度学习需要较强的理论功底,用好TensorFlow又需要足够的实践和解析。用TensorFlow实现的程序则有助于读者更好地理解和把握该Tensor-Flow的基本思想和一个模型实现过程。本文能够为入门级的读者带来一个全新的体验。

猜你喜欢
梯度线性深度
渐近线性Klein-Gordon-Maxwell系统正解的存在性
一个改进的WYL型三项共轭梯度法
线性回归方程的求解与应用
深度理解一元一次方程
一种自适应Dai-Liao共轭梯度法
应用数学(2020年2期)2020-06-24 06:02:50
深度观察
深度观察
一类扭积形式的梯度近Ricci孤立子
二阶线性微分方程的解法
深度观察