TensorFlow 随笔1 -- 计算图与符号运算

暂时可能永久只是单机版的TensorFlow的学习笔记,因为我没有条件学习分布式的TensorFlow :-)


Concepts in TensorFlow

TensorFlow 有非常多的抽象概念,初学起来非常麻烦,然而学会了之后就会发现,其实TensorFlow 这些个抽象的概念,还是非常麻烦,一点也不excited。

  • tf称自己为一个计算框架,然而我们主要拿它来做神经网络和深度学习的代码编写,换句话说,tf文档中所言“计算任务”,大多数情况下对我们就是指一个或多个神经网络。
  • tf是一个计算框架,计算框架的意思就是,你先定义一群运算,但是不算他们,待你执行run方法后,tf才按照你规定的运算路径和运算方法开始计算。
  • tf将NN称为图(graph),更贴近NN本质。
  • tf中的数据成为tensor,张量,没有什么高大的,和张量分解的张量一样,即多维数组,或者叫多维向量,又或者叫多维矩阵。
  • 在C/C++ 版本的tf中,tensor 的类型是tensorflow::tensor,在python 版的tf中,tensor的类型是numpy.ndarray。
  • tf中的变量和常量也写成了类,Variable类和constant类,其作用和编程语言的变量和常量无异,都是数据的句柄。但是你不再能通过a = 1这样的方式来进行常量/变量声明,取而代之的,是a = tf.constant(1)来声明常量和a = tf.Variable(1)的方式来声明变量。
  • 理所应当的,加减乘除以及其他运算,tf都有单独的实现。
  • tf管各种运算和状态叫做操作(operation / op),包括加减乘除、变量赋值、数组切片、矩阵相乘、ReLU、Sigmoid等等。值得一提的是,变量和常量也属于operation的一种,具体参考下表。operations in TensorFlow
  • tf有一个奇怪的operation叫initialize,意思是,所有的variable在session开始run之前必须initialize,不initialize会报错。
  • 这样抽象出来了之后,可以说graph就是op的集合。几乎不管什么东西,都叫op。
  • tf中,一个NN的context通过Session对象来流转,也就是说NN的计算要靠Session管理,NN的定义和计算会塞到Session对象内,然后运行Session对象。
  • 所以NN in tf 大概是这个样子的:op(var、constant、四则运算、常用函数、 矩阵运算、 控制流运算)-> graph -> session -> run -> 得到结果
  • 其实只要往session塞能run的东西,session都能正常run,不过作为NN存在时,我们通常用session来run一个graph。

大概就是这样,一句话来说,数是tensor,其他都是operation,NN是graph,塞进session里面run。

:-)

Basic Codes

下面的block是一个简单的python代码块:

x = 1
y = x + 2
print y

如上面所说,转化成TensorFlow的格式,要求:

  1. 变量使用tf.Variable 代替
  2. 常量使用tf.constant 代替
  3. 运算方法使用tf 的operation 代替
  4. 变量在seesion开始run之前要initialize
  5. 运算方法不会计算,要放入session然后run

于是, tf中该段代码如下所示:

import tensorflow as tf

x = tf.constant(1, name = 'x')
y = tf.Variable(x + 2, name = 'y')

# 尝试打印一下y看看是什么结果,虽然我能猜到肯定不是3
print y
# <tensorflow.python.ops.variables.Variable object at 0x115e76d50>

model = tf.initialize_all_variables()

with tf.Session() as session:
    session.run(model)
    print session.run(y)
    # 3
    

上面的代码返回:

<tensorflow.python.ops.variables.Variable object at 0x115e76d50>
3

这就是符号运算的魅力:-)

Reference

关于TensorFlow的更多相关概念,可以参考官方白皮书:
http://download.tensorflow.org/paper/whitepaper2015.pdf

Comments
Write a Comment