Tensorflow lesson 1---第一个机器学习的代码

来源:互联网 发布:2017最新人生网络用语 编辑:程序博客网 时间:2024/05/29 17:54

神经网络,机器学习,可以说是现在最流行的计算机技术,TensorFlow是谷歌开源的机器学习框架,听起来就很高大上,很难学习,不幸的是国内的一些教程都是原文翻译谷歌官方教程,非常难以学习,所以本系列教程就是用比较容易懂的语言来教大家什么tensorflow。

首先tensorflow是一个深度学习的框架,其定义了一套神经网络机制,是用户可以在这套神经网络上开发自己的深度学习模型,进行机器学习。

说的通俗一点tensorflow就是一套神经网络的编程框架,和java中的各种框架一个概念,只是他是用来开发深度学习的框架。其正真复杂的东西是如何在这套框架的基础上设计深度学习的模型,比如现在的CNN卷积神经网络,RNN循环神经网络,这都是深度学习模型,都是基于神经网络开发出来的模型。

所以大家学习的时候,不应该把tensorflow看做是多么高大上的东西,而把他看做一种深度学习的编程框架,这样更容易学习,而真正高大上的是那些包含了很多数学知识的模型。这套教程我们就用简单易懂的语言来介绍tensorflow。课程中所有的示例代码都是基于python3,和tensorflow 1.1
下面我们来介绍一下几个基本的概念

  • 唯一的数据表达结构tensor:tensorflow中只有一种数据结构tensor表达数据,tensor的中文意思是张量,不懂的要去复习一下高等数学,线性代数。也就是说tensorflow的作用就是来对tensor来进行处理的,而不是传统的int,float,double数据类型,当然tensor中的元素的数据类型则可以是int,float等,不管你做什么处理,都要构造成tensor才能被tensorflow所处理,即使是一个简单整形数字

  • 变量:tensorflow中也有变量就如同我们传统编程中使用的变量一样,他是通过tf.Variable来定义的,其在使用过程中是可以被修改的,经常会被用做需要训练得出的结果,比如 y=wx+b,我们给定一组y,和x,我们希望神经网络能够学习其中的规律,得出w,和b应该是多少,这时候我们一般就 会把w,和b定义成变量,让神经网络不断的纠正w,和b

W=tf.Variable([.3],tf.float32)b=tf.Variable([-.3],tf.float32)x=tf.placeholder(tf.float32)linear_model=W*x+b
  • 常量:tensorflow中的常量是用tf.constant来定义的,顾名思义常量定义后是不可以修改的,和我们传统开发语言中的常量是一样的概念
node1 = tf.constant(3.0, tf.float32)  # create a constantnode2 = tf.constant(4.0)

如上我们声明了两个常量,在使用过程中就不能再被修改了

  • placeholder:就是tensorflow中的输入参数,可以在使用过程中重新赋值
a = tf.placeholder(tf.float32)b = tf.placeholder(tf.float32)
  • optimizer:tensorflow学习的过程,就是把实际的结果和神经网络计算出来的结果做比较,使得计算结果不断的逼近实际的结果,这其中就涉及到一个优化器的概念,每次计算完以后都用优化器来来优化,不断逼近,其本质上就是按照某种算法不断的调整参数,如上面讲到的例子y=wx+b,就是不断的修正w和b,这就是训练的过程。

下面我就用前面介绍的概念来设计一个简单的机器学习模型,有助于大家根据直观的理解

第一个机器学习的tensorflow代码
如下这段代码是一个完整的机器学习过程,这段代码在给定x=[1,2,3,4]情况下y=[0,-1,-2,-3],让机器学习y= Wx + b的方程中W和b应该是多少。

import tensorflow as tfimport numpy as npsess = tf.Session()#初始化一个session,tensorflow中所有的运算都是通过session来实现的W=tf.Variable([.3],tf.float32)#声明W变量b=tf.Variable([-.3],tf.float32)#声明b变量x=tf.placeholder(tf.float32)#声明x作为输入参数,在训练的时候可以给定训练值linear_model=W*x+b#声明回归模型y=Wx+binit=tf.global_variables_initializer()#初始化所有变量y=tf.placeholder(tf.float32)#声明y作为输入产生,在训练的时候可以给定训练值squared_deltas=tf.square(linear_model-y)#计算程序计算的值和实际值的差异loss=tf.reduce_sum(squared_deltas)#累积误差optimizar =tf.train.GradientDescentOptimizer(0.01)#定义优化器train=optimizar.minimize(loss)#设定优化器是使误差越来越小sess.run(init)#初始化for i in range(1000):#训练1000次    sess.run(train,{x:[1,2,3,4],y:[0,-1,-2,-3]})    if i%20==0:#每训练20次,打印这时候的W和b        print(i,sess.run(W),sess.run(b))

执行这段训练模型会得到如下的输出:

0 [-0.21999997] [-0.456]20 [-0.58761531] [-0.21246126]40 [-0.67591733] [ 0.04715736]60 [-0.74531162] [ 0.25118509]80 [-0.79984683] [ 0.41152528]100 [-0.84270465] [ 0.53753263]120 [-0.87638563] [ 0.63655871]140 [-0.90285456] [ 0.71438056]160 [-0.92365587] [ 0.77553892]180 [-0.94000298] [ 0.82360154]200 [-0.95284992] [ 0.86137295]220 [-0.96294594] [ 0.89105648]240 [-0.97088015] [ 0.91438407]260 [-0.97711545] [ 0.93271655]280 [-0.98201561] [ 0.94712371]300 [-0.98586655] [ 0.95844597]320 [-0.98889291] [ 0.96734387]340 [-0.99127126] [ 0.97433633]360 [-0.99314034] [ 0.97983164]380 [-0.99460912] [ 0.98415017]400 [-0.99576342] [ 0.98754394]420 [-0.9966706] [ 0.99021119]440 [-0.99738348] [ 0.99230719]460 [-0.99794376] [ 0.99395436]480 [-0.99838412] [ 0.99524909]500 [-0.99873012] [ 0.99626648]520 [-0.99900204] [ 0.99706584]540 [-0.99921572] [ 0.99769413]560 [-0.99938363] [ 0.9981879]580 [-0.99951565] [ 0.99857605]600 [-0.99961936] [ 0.99888098]620 [-0.9997009] [ 0.99912065]640 [-0.99976492] [ 0.99930882]660 [-0.99981529] [ 0.99945682]680 [-0.9998548] [ 0.99957311]700 [-0.99988592] [ 0.9996646]720 [-0.9999103] [ 0.99973637]740 [-0.99992955] [ 0.99979281]760 [-0.99994463] [ 0.99983722]780 [-0.99995649] [ 0.99987203]800 [-0.99996579] [ 0.99989945]820 [-0.99997312] [ 0.9999209]840 [-0.99997884] [ 0.99993783]860 [-0.99998337] [ 0.99995112]880 [-0.99998695] [ 0.99996156]900 [-0.99998969] [ 0.99996972]920 [-0.99999189] [ 0.99997616]940 [-0.99999362] [ 0.99998128]960 [-0.99999499] [ 0.99998528]980 [-0.99999613] [ 0.99998856]

从输出的结果可以看出,整个训练就是一个不断逼近的过程,当最后训练完的时候,W和b已经非常逼近实际的值了,精度是非常高的。

这段代码虽然是非常简单的一段机器学习的代码,但实际上所有的机器学习都遵循这样一个过程。

示例程序请关注http://www.diegorobot.com

0 0
原创粉丝点击