Hello, TensorFlow入门教程

  本文是 TensorFlow入门教程,这里案例主要是由Python 2.7或3.3+以上版本,Tensorflow则是0.8版本。TensorFlow是一个深度学习库,它的独特点是:

1. 核心库能够支持广泛的机器学习技术,不只是深度学习。

2.线性代数和其他内在算法能突出暴露开放。

3.除了核心的机器学习功能以外,tensorflow还包括自己的日志系统,交互式日志虚拟化和丰富的工程化服务架构。

4.tensorflow执行模型不同于Python的scikit学习,或R语言等大多数工具。

简单图graph

让我们从TensorFlow的最简单图graph开始:

>>> import tensorflow as tf

从这行开始,TensorFlow已经开始管理许多状态,它有一个隐式默认的图,_存在目录default_graph_stack下,但是我们不能直接访问,而是使用tf.get_default_graph()

>>> graph = tf.get_default_graph()

TensorFlow图的节点称为"operation操作"或“ops”,我们可以使用graph.get_operations()看到图中操作是什么?

>>> graph.get_operations()  
## []

目前在图中什么也没有,我们需要放入需要让TensorFlow计算的数据,开始放入一个简单常量值:

>>> input_value = tf.constant(1.0)

现在,常量作为节点存在了,也就是作为图中一个操作,Python变量名称input_value间接指向这个操作,但是我们也能从默认图中发现这个操作:

>>> operations = graph.get_operations()
>>> operations 
## [<tensorflow.python.framework.ops.Operation at 0x1185005d0>] 
>>> operations[0].node_def 
## name: "Const" 
## op: "Const" 
## attr { 
##   key: "dtype" 
##   value { 
##     type: DT_FLOAT 
##   } 
## } 
## attr { 
##   key: "value" 
##   value { 
##     tensor { 
##       dtype: DT_FLOAT 
##       tensor_shape { 
##       } 
##       float_val: 1.0 
##     } 
##   } 
## } 

TensorFlow内部使用protocol buffer,它是一种类似JSON的格式,打印出常量操作的node_def可以显示出TensorFlow第一个的protocol buffer视图。

为了在Python高效的数值计算,我们通常使用像NumPy这样库包来实现矩阵乘法等昂贵的操作(费CPU),当然,我们还可以使用其他语言来做这些CPU敏感的任务,但是切换回Python又需要一笔很大的开销,如果你想在GPU上运行这笔开销尤其昂贵,而如果在一个分布式网络中进行计算,其传输数据变成了计算的高成本原因。

TensorFlow也是这样在Python外面进行这种笨重的迁移,但是采取了一些办法降低了这种笨重迁移的开销,从而让我们描述的一个交互操作图可以完全在Python外面运行。鱼和熊掌兼得是TensorFlow巧妙之处。

TensorFlow分离了计算的定义和计算的执行,它们可以分别在不同地方进行,一个图定义了操作,而操作只会在一个会话session中发生,图和会话是独立创建的,图类似计划,而会话类似计划的实施。这种方式被称为懒赋值或懒计算。

对于上面案例中input_value,如果我们打开看看其内部,它不能告诉我这个变量数值是什么,而是指向了一个计算代理:

>>> input_value  
## <tf.Tensor 'Const:0' shape=() dtype=float32>

为了确实获得input_value的数值,我们需要创建一个会话session,在这个会话中,图操作才能真正被计算,这需要我们显式明确命令其运行一次:

>>> sess = tf.Session()  
>>> sess.run(input_value)  ## 1.0

上面通过会话的run命令才能真正计算出input_value的数值。

下面我们看看TensorFlow的神经元.

 

Tensorflow简单教程

大数据专题