tensorflow
April 12, 2018
引言 # 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和代码跳转。 ...