0

TensorFlow修炼手册(1)——基础入门

TensorFlow是一个使用图计算的一个通用的数值计算的框架,图中的节点表示数学操作,而图的边表示操作之间的多维数据(张量,tensor)。TensorFlow的架构很灵活而且富有可拓展性,它可以部署在多核CPU或者是GPU上,不管是台式机,服务器,亦或是移动设备,只要利用它的简单的API,就能很好的在这些平台上运算。TensorFlow最初是由Google’s Machine Intelligence research organization的Google Brain团队为了实现机器学习和深度研究而开发的,但是TensorFlow在其他的领域也能够产生广泛的运用,目前已经开源

tensorflow

TensorFlow

目前TensorFlow主要用于机器学习和深度学习,这篇博客是TensorFlow的入门博客,主要介绍TensorFlow的数据初始化操作。随着我学习的深入,接下来的博客会介绍TensorFlow其他的深入的话题。主要内容有:

  • Graph
  • Session
  • Variable
  • Placeholder
  • Constant

Graph

在计算图谱中,我们先要在图中定义好操作,然后再在Session中feed数据来运行每个操作,这是计算图谱的思想,Spark的也是基于图计算的。下图定义了一个图,然后对图执行操作。

tensors_flowing

图片来自:https://www.tensorflow.org/images/tensors_flowing.gif

既然我们有了感性认识,那么怎么在代码层面去实现呢?那些给出代码吧。

我们需要定义一个图,然后在图中定义tensor,比如我们在图中定义了value这个变量,它的初始值为0。定义了图之后,我们才能创建一个session运行图中的每个操作。默认情况下,TensorFlow的Python库中是有一个默认图的,如下代码所示

上面的代码定义了两个constant类型的tensor,然后定义了一个matul的操作,代码的意思很容易懂。

Session

在我们定义了图之后,我们需要创建session来运行图中的操作,在上面的代码中,需要注意的是,这里如果直接print product是打印一个tensor类型的结果,不是你需要的最终的结果,如下代码所示

如果需要得到product的结果就需要启动session来运行图中的操作,如下代码所示

当然,你也可以不用使用with语句来创建session,不过记得在最后需要关闭session,如sess.close()。在交互环境中,可以使用InteractiveSession类,以及Tensor.eval()Operation.run()等方法,如在IPython等交互环境中可以使用如下代码:

以上代码都可以自解释,这里不做解释。

Variable

这应该是除SessionGraph之外的最重要的类了,而且这个变量非常常用,由于我们需要在图中定义一些tensor,比如我们需要定义一个28*28的每个元素服从均值为0,标准差是0.3的正态分布的矩阵,可以这么定义

当然,除了在Variable中传入一个tensor之外,也传入一个Python的数值类型的数据,比如0:

在定义了Variable之后我们需要在session阶段进行初始化,调用tf.initialize_all_variables(),你有时候会需要用另一个变量的初始化值给当前变量初始化。由于tf.initialize_all_variables()是并行地初始化所有变量,所以在有这种需求的情况下需要小心。用其它变量的值初始化一个新的变量时,使用其它变量的initialized_value()属性。你可以直接把已初始化的值作为新变量的初始值,或者把它当做tensor计算得到一个值赋予新变量。

更多详情点击这里这里

Placeholder

这是TensorFlow种另一种tensor类型,这是一种占位符思想,就是我们先初始化一些数值类型的变量,然后我们在运行的时候对它进行赋值。来看个例子吧

之类在run的时候利用通过在传入一个字典来对placeholder进行赋值,不管传入的数据类型是什么,feed_dict里面必须传入一个字典,而且字典的键的名字和Graph中的placeholder的实例名字一一对应。

Constant

定义常tensor类型,tf.constant(value, dtype=None, shape=None, name='Const', verify_shape=False)的参数value必须是Python数据类型的常量值或者是一个list。

其实Constant类型有很多,参考这里

参考

goingmyway

我是一只野生程序猿,我关注机器学习,神经网络,深度学习,增强学习,人工智能,Python,C/C++,Linux

发表评论

电子邮件地址不会被公开。 必填项已用*标注