-----------------------------------------------------------------------------------------------
深度学习有很多主流的开源工具,每款都各有自己的特点,这里主要是针对tensorflow, 具体原因我就不在这解释了,大家可以根据自己的喜好去选择自己喜欢的工具,现在比较主流的有caffe、theano、pytorch等将近十款,此外,百度现如今也推出了自己的深度学习工具paddlepaddle,至于有什么优点,哈哈,我也不知道,感兴趣的可以去尝试一下。(After all,the domestic)
-----------------------------------------------------------------------------------------------
Tensorflow是谷歌2015年11月9日正式开源的计算框架。它可以很好的支持深度学习的各种算法,但它的应用也不仅限于深度学习。(知道就可以),tensorflow主要支持python和c++语言,但毕竟可以说python现已成为用于深度学习最热门的语言,所以下面的内容,都是基于python语言的。
------------------------------------------------------------------------------------
大家如果之前没有接触过tensorflow,第一眼见它,就会误以为与流体力学相关,事实并非如此,究竟什么是tensorflow呢,在这里按着我的理解,通俗得解释一下: 深度学习实质上就是数学计算,tensorflow作为深度学习的工具,自然Google将其设计的目的就是帮助我们进行深度学习的相关计算(暂且这么认为,实际上tensorflow的功能远远不止如此.......这么讲可能不太准确,目的是帮助形象化的理解).
tensorflow可以理解为:tensor(张量)+flow(流)
tensor呢,就是在tensorflow中进行计算的数据的形式,在这,可以简单的把它理解为多维数组:(当维度等于0时,也就是常数,例如a = 5. 维度为1时,一维数组,也就是向量的形式,a = [1,2,3]. 维度为2时,二维数组,a = [[2,3,4],[3,4,5]] 维度为还可以为3、4、5.........n).
flow(流),就是数据之间进行计算的转化过程.
这里先记住这两个概念,通过下面的学习,你将会清楚的明白.
------------------------------------------------------------------------------------
1、Tensorflow的计算模型——计算图
这里先入为主的将计算图摆在这,刚才我们说了,tensorflow可以用来深度学习的相关计算,那计算图又是什么鬼呢???在tensorflow中,所有的计算都会被转化为上面计算图的节点,上述求解的流程,也就是flow的概念。下面我们用代码来实现它()
[1]import tensorflow as tf
#在python中用这个语句载入tensorflow.其实我的理解就是:就是用tf来代替tensorflow,这样做的目的就是让代码变得简洁一些。
[2]a = tf.constant(3.0)
[3]b = tf.constant(4.5)
[4]result1 = tf.add(a,b)
[5]c = tf.constant(3.0)
[6]result2 = tf.multiply(c,result1)
print(result1)
print(result2)
在上面的[1]-[6]代码中,张量中并没有真正的保存数字,它保存的是如何得到这些计算的过程。例如我们运行上面的程序,并不会得到加法和乘法的结果,而只是得到一个对结果的引用。
上述的计算图在这里就有一个很好的解释,tf.consant(), tf.add(), tf.multiply()都表示计算,上面的从上到下,两个蓝色圆圈代表赋值计算,并将结果保存在变量a 和 b 中,绿色框框代表加法计算,将结果保存在result1中,下面这个蓝色圆圈优势一个赋值计算,计算结果保存在变量c中,接着,绿色框框代表乘法计算,然后输出,实际上,tensorflow的计算,并不是实际的数字,而是我上面描述的这个结构和流程。
在这个计算过程中,tf会自动将定义的计算转化为图上的节点,在tensorflow的程序中,系统会自动维护一个默认的图,好奇的同学可能会问,为什么是默认的,其实也就是在tf 的库中,所存在的图模型已经足够我们用来进行任何的计算,所以不需要我么自己去生成图啦(当然这也基本上是不可能的事)。又有好奇的同学会问,图在哪呢,我怎么看不见,哈哈,老实的讲,我也在纠结这个问题,我目前不清楚是不是可以通过tensorboard能够将图显示出来,后面深入学习之后,会进行补充和更改。但在这里,我们可以通过tf.get_default_graph函数获取当前系统默认的计算图:
[1]print(a.graph is tf.get_default_graph())
#这行代码就不要我解释了吧,打印的结果为True-----------------------------------------------------------------------------------------
tensorflow的运行模型——会话
会话的作用是执行定义好的计算,会话拥有并管理程序运行时的所有资源,这里的资源可以理解为,张量,变量或者运行程序时所需要的队列资源等等。在运算完成之后还要对资源进行回收。
会话模式主要分为一下两种:
sess = tf.Session() #创建一个会话
sess.run() #使用这个会话来运行计算
sess.close() #关闭会话,防止资源泄漏
with tf.Session() as sess: #创建一个会话,这里采用的是python的上下文管理模式,优点就是,当上下文退出时,会话自动关闭,资源自动释放
sess.run() #使用会话来计算
从上面的两种方式,我们可以看到,第二种操作起来,更为简洁,安全可靠,所以通常 采取第二种方式。至于python的上下文管理器可以自己去了解。
------------------------------------------------------------------------------------------------------------
有的同学可能会问,tensorflow为什么采用计算图的方式呢?我目前想到两种我认为可能的原因:
第一、利用计算图的方式可以更加结构化的体现计算过程,就像我们中学时期学的流程图,这个过程实际上也是我们人脑在计算的时候会发生的。比如计算5+2x3的时候,实际上 我们的确是先计算出2x3的中间值,然后再让5加上这个中间值。就是这样的一个流程。
第二、这种结构,很利于我们提取中间某些节点的结果。按照这个图的流程结构,当我们计算复杂的计算时,例如:(a-e)*f+(b+c)*d,我们同时可以提取去中间运算产生的值。相反如果直接一下子算出来的是式子的答案,如果要得到中间某一个值,还得重新计算一次前面的几步。这样就会比较麻烦。
------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------
Options : History : Feedback : Donate | Close |