tensorflow

tensorflow

April 12, 2018
TF, Python

引言 #

Tensorflow究其本质还是一个编程框架,只是这个框架主要面向机器学习和深度学习领域。我们应该还是要使用学习框架的方法来学习他。

很多时候我们要先分清楚问题的主要矛盾是什么。 在很久以前,我学习视频剪辑。那个时候我对于视频剪辑一窍不通,好不容易安装上pr又要开始漫长的学习怎么使用。 我看了很多的视频和博客,教我如何使用这个软件,面对错综复杂的按钮和组合操作,我不知道什么东西在哪,有什么作用。当我明白了什么工具在什么位置的时候,我发现我依然不会做视频。 后来,我想到了,我从来就不懂如何剪辑视频,而不是不会使用这个软件。 如果我清楚的明白调整alpha通道会产生什么效果等一系列参数的作用,我自然就会明白的当前需要做什么,需要改变什么值,去找对应的按钮,而找对应的按钮只要很简单的搜索一下就可以了。 所以,软件并非是为了我这样的小白设计的,而是为专业的人设计的,因此我才会看着琳琅满目的按钮不知所措。

很多刚准备入门机器学习和深度学习的同学,大家的问题可能并不是不会使用Tensorflow这个框架,而是不会设计Model,不懂一个Model需要先做什么后做什么,在什么层次需要应用什么函数来达到效果。 换个角度来说,就算熟悉的掌握了Tensorflow的每个函数如何调用,也未必就能实现神经网络。 因此,Tensorflow做为一个框架,并不是让你对每个函数都了如指掌,而是当你想做什么动作的时候,知道框架中已经实现了这个功能,你知道要去寻找什么。而寻找对应的函数,就是很简单的问题了,然后再经过几次使用,你就完全可以记住了。

学习框架就是要理解它的哲学 #

框架为我们提供了一些功能上的便利,为了实现功能的通用性和可扩展性,框架需要一些辅助机制,来确保可扩展性和通用性。

Tensorflow这类算法的框架,相比较复杂的业务工程类框架要简单很多。

Tensor: 张量 flow : 流

他的名字已经揭示了他的核心逻辑。Tensorflow 中的计算使用一个有向图(计算图)来表示。其中每个运算操作作为一个点,点与点之间连边,数据就是这里的Tensor,Tensor在其中流转,最终完成计算。

一个计算图描述了一个计算的流程,没个点可以有任意多的输入和输出。有一些边并不是用来流转数据的,而是用来依赖控制,用来保持数据在正确的时间被运算。

因此我们的代码中,大部分是在描述一个计算图,而当这个计算图被描述完毕后,需要触发一个Session来执行这个计算图。

我们不能事无巨细的讲解框架中的设计逻辑。这里我们简要介绍比较重要的几个元素,是深入学习之前必须先搞透的东西。

Variable #

Variable是一类特殊的运算操作,每次执行计算图后,Variable中的数据tensor会被保存下来,同时在计算的过程中也会被更新,比如神经网络的系数,每次训练都会被更新,最后会被保存下来。

Session #

TensorFlow执行计算图需要实例化一个Session类来执行。调用Session的run方法,他可以自动计算所需计算的节点并按照依赖顺序计算他们,并且每个Session持有一些资源, 比如Variable,在计算结束的时候,我们要关闭Session以减少开销。

小经验 #

学习框架有一些方法,是很多实践总结下来的经验,分享一下。

过程 #

学习框架的过程大致是这样的:


    理解核心概念/理念 ------->  入门经典代码/项目 -------> 核心类的代码
   (设计哲学)                 (加深理解)         (这些代码会大体勾勒出整个框架的逻辑)
                                                             |
                                                             |
                                                             V
                                        ---------->  更复杂的代码/项目
                                        |          (学习如何使用/最佳实践)
                                        |                    |
                                        |                    |
                                        |                    V
                                        |__________  更多核心类的实现
                                                    (会让你对每个部分设计目的更清晰,
                                                         帮助你融会贯通)

方法 #

前期刚接触的时候,多看博客,开始接触代码后,学会用好源码。

注意!这里的源码并不代码,而是源代码中的注释!

框架的代码都是相对规范的,在核心的类中都有非常详细的注释,解释了该类的作用、调用方式、特点、注意事项等,还可以直观的看到参数的情况。很多框架的API文档其实就是这些注释换个地方给你而已。 因此与其看文档,有的时候源代码会更好用。当然你需要熟练的使用IDE和代码跳转。

书目推荐 #

由于Tensorflow的框架逻辑并不难,难的是用那些模型本身,因此很少有非常基础的书籍。 这里推荐一个并不是针对小白的书,但是小白带着看也很好的,更高阶也更实用一些。 《TensorFLow实战》 黄文坚 唐源 著