TensorFlow官网学习前的概览和提问(预习笔记)

前言

几个月前安装过一次tensorflow,但是早就忘了,今天又是回到起点重新安装。原因很简单:每一次接触都没有很明确的目的,也没有特别的理由去坚持熟悉它,所以最后就是浪费了时间。

所以我打算先大致了解一下官网结构,记下我的第一想法和疑问,有助于我从宏观上了解需要掌握的东西。希望这个做法有助于我坚持去学习,最终把它变成我掌握的技能之一。

以下全都是我自己理解和想象的,主要目的是帮助我建立tensorflow的学习框架图。

Tensorflow官网菜单概览

  1. Install:告诉我们如何安装
  2. Develop:安装好以后就要开始开发了
  3. API r1.4:详细的API描述
  4. Deploy:开发好以后如何部署
  5. Extend:进阶到高级开发者,可以自己去扩展一些东西
  6. Community:社区,问题讨论,style guide竟然也在这。
  7. Github链接。

目前的目标:完成第二阶段Develop应该就可以了吧?!

Install

今天刚刚安装好linux版本,也写了文章做笔记。

要点概括:

  1. 有两种版本:基础的CPU版本,高速的GPU版本。
  2. 主要使用python开发,但也可以单独配置其他语言的环境。

之后可能会在mac上再装一次。

Develop

重头戏在这里,如果我想使用tensorflow,需要掌握的知识全部在这里,所以需要好好分解一下。

Get Started

针对所有人的入门指南,包括啥都不懂的新手以及程序员。

Getting Started With Tensorflow

介绍了一些基本概念,包括什么是tensor,graph,跑了一个样例代码训练data。
有点算是用一个简单的例子把tensorflow训练一个模型的流程跑一遍。继hello world之后的一个最基础的小程序,但是没有应用场景。
误会:以为estimator是评估模型好不好,其实estimator是tf一个high level的API,让你不用去处理底层的实现细节。

MNIST

一个直观的使用实例:识别数字。这是个蛮成熟的use case。
包含了两个部分,一个是简单版的MNIST,帮助你了解ML,一个是用Deep深度学习做的MNIST。(这个deep好像不是深度学习的意思)
最后一个部分是借助于MNIST从low-level去介绍tensorflow的API。

以上理解好像不是太正确。
第一个是用high-level的API实现的MNIST,第二个是介绍了更多的ML概念,第二个是low-level API。

总的来说,全都是用的tensorflow来实现这个例子,分阶段帮助新手入门的感觉。学习的时候可以去总结和比较看看这三个教程的关系。

tf.estimator

乍一看我还以为是模型评估,上面我也是这么写的。现在看来不是。
这是新手用high-level API时会常用到的方法,分了两个页面来介绍这个方法。我猜一个是介绍概念,一个是根据例子来介绍如何使用。

TensorBoard

这是用于可视化调试的,但是从来没有用过。目前的理解就是tensorflow的程序分了两个阶段:构建阶段和执行阶段。执行阶段也就是那句run(),在这句之前是根本看不到任何变量的值的。因为这种情况以及分布式的运行过程,所以提供了这个board帮助调试。

Programmer's Guide

上一章节入门以后,外行的新手们就可以开心离开了,但是程序员就该进入这个章节了。介绍了许多概念。其实Getting Started里介绍了一些概念,但这一章应该是介绍得更加细致。

(改用list来笔记)

  1. Estimators:如我上面所理解的,是一个high-level的API封装,可能是给非程序员用的。
  2. Tensors:如何创建/操作/使用张量。(张量/operator/graph是什么关系??)
  3. Variables:如何表示共享的,常用的状态。(不是太理解,意思是tensors都是一次性的吗?tensor跟变量是两回事?变量是用来存储和表示state/状态的?)
  4. Graphs and Sessions:(graph的结构让tf可以更好的利用分布式并行计算,而要想采用这个结构,session是必不可少的。为了确定边界?还有区分构建阶段和执行阶段。)
    1. 一个graph表示一个计算任务,一个计算任务包含:0或多个输入,一个操作operation,0或多个输出。计算任务构成了基本的tf结点?helloworld的例子连图都没有,所以根本不算跑了。错,不管什么代码都有一个default graph啊忘了吗?
    2. Estimators和Keras都是high-level的API,它都帮你把graph和session处理好了。(keras的作者被google买进来了,因为做得好,所以要整合到tf里。)
  5. Saving and Restoring:如何保存variables和models。(果然variables不是其他语言里的那种变量,是保存一个状态。state)
  6. Input Pipelines:如何set up data pipelines让你把数据读入到tf程序里(因为ml的数据量都会很大,内存可能不够用,所以input data是需要单独解决的一个问题)
  7. Embeddings:向量(说起来它跟tensor之间是什么关系呢?!对了,好像很多人都不翻译的,就是直接用英文表示)。介绍embeddings的概念,还告诉我们怎么在TensorBoard里查看embeddings。
  8. Debugging:怎么对tensorflow程序进行debug(tfdbg)。说起来,任何程序的debug我都不太会。
  9. TensorFlow Version Compatibility:毕竟也是一个active的项目,版本变化比较多,介绍版本之间的兼容性。
  10. FAQ:常见问题。

Tutorials

顾名思义,手把手的教你用。前面都是带你入门,给你打基础的。

  1. Using GPUs:最开始提到tf有两种版本,这一章介绍一下两种的区别,tf分别是怎么跟GPU和CPU怎么交互的。(目前可以先略过)

(理论上应该继续用list罗列,不过接下来好像分主题会比较清晰)

tensorflow是一个deep learning的框架,但是深度学习也不是说什么领域都可以,也是有它擅长和成熟的领域。
目前来说主要集中在:图像相关,语音相关,还有一些很成熟的算法模型(可能有很多的应用场景,比如广告分类,垃圾邮件处理等等等等)
我想图像和语音属于效果比较好展示和好理解的领域吧,所以就成了一个很热门的分支。

Image Recognition
  1. 介绍了Image Recognition这个领域,同时介绍了一个model来做图像识别(inception,google出的一个图像识别的model)。
    说起来,model又指算法,又指model file,确实很容易迷失。不过想想也是,这确实是一个模糊的概念。
    inception是google的算法,其实facebook也有自己的算法模型。还有一些开源组织,研究机构都推出了自己的。
    这就是了解这个领域的必要性。不然可能很容易迷失。
  2. 深度学习是基于神经网络的,所以会有很多层layer。这里介绍一下怎么重新retrain一下inception模型的最后一层,让它可以识别new categories。
    所以是可以单独只训练一层模型的,是不是就是这里需要用到variables保存state?!!
  3. 介绍TF layers。用卷积神经网络(Convolutional Neural Networks, CNNs)来介绍TF layer的概念。然后用TF来建一个CNN(模型?)
  4. CNN。(CNN本身是一个概念,也是一个算法,也是一个模型?!?跟inception什么关系,inception是CNN还是RNN还是其他的什么NN,还是它根本不是NN????)建一个small CNN用来做图像识别。这一章是给高级TF用户的。我觉得我起码也要到达这一层次吧?!
Human Language
  1. Word Embeddings:怎么把words变成embeddings(也就是words的vector表达)
  2. RNN(Recurrent Neural Networks),用RNN来预测一个句子里的下一个单词word。
  3. Sequence-to-Sequence Model, 这是序列模型的意思吗?anyway,这一部分介绍怎样利用这个models把英文翻译成法文!

看标题都觉得自然语言的处理都是在解决很直观的问题。其实里面很多坑的吧!!不过这部分也是我要掌握的。

Focus on Linear Models

光是线性模型其实就已經很强大,可以做到非常多的事情了。让我们看看接下来的例子。

  1. 介绍TF里的大规模线性模型:如何用TF high-level API来建造他们。
    大规模large-scale指的是啥啊,数据量吗?还是说很多不同的线性模型?可能是说维度巨大。
  2. 用一个二元分类的问题来看看TF怎么用线性模型解决这个问题。
  3. 来看看在TF里如何联合使用线性模型和深度学习模型解决问题。当然是用high-level API。至此我得出一个结论:并不是说程序员就要用low-level API,那只是装逼,了解low的是为了更深刻理解high的,当然最后能用high就用high,减少出错概率。
  4. 告诉我们怎么指明线性模型的kernel,来提高线性模型的质量。(所以又来一个kernel/算法/模型,这三个词我有点懵)
  5. 来建一个简单的语音识别的network(把声音变成文本)(所以network指的是神经网络?那神经网络跟线性模型什么关系?)
Other Problems besides ML

虽然TF专长于ML,不过也是可以用它解决一些非机器学习的数学问题。

  1. Mandelbrot Set
  2. Partial Differential Equations

不翻译了,暂时不会看这个。

Performance

(先不要)

Mobile

(目录暂略,因为我觉得我心中已经有数了)

主要是如何在移动设备上使用,似乎没提到训练和使用model的具体问题。但是看完第二章,这里可能就没疑问了吧。

posted @ 2018-01-17 19:43  dfghjkloiuy  阅读(197)  评论(0编辑  收藏  举报