暂时可能永久只是单机版的TensorFlow的学习笔记,因为我没有条件学习分布式的TensorFlow :-)
Table of Contents TensorFlow Notes 1Concepts in TensorFlowBasic CodesReference
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。(由此可见numpy写的有多么好。
- tf中的变量和常量也写成了类,Variable类和constant类,其作用和编程语言的变量和常量无异,都是数据的句柄。但是你不再能通过a = 1这样的方式来进行常量/变量声明,取而代之的,是a = tf.constant(1)来声明常量和a = tf.Variable(1)的方式来声明变量。
- 理所应当的,加减乘除以及其他运算,tf都有单独的实现。
- tf管各种运算和状态叫做操作(operation / op),包括加减乘除、变量赋值、数组切片、矩阵相乘、ReLU、Sigmoid等等。值得一提的是,变量和常量也属于operation的一种,具体参考下表。
- 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。
tf真简单啊。
:-)
Basic Codes
下面的block是一个简单的python代码块:
x = 1
y = x + 2
print y
如上面所说,转化成TensorFlow的格式,要求:
- 变量使用tf.Variable 代替
- 常量使用tf.constant 代替
- 运算方法使用tf 的operation 代替
- 变量在seesion开始run之前要initialize
- 运算方法不会计算,要放入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