Tensorflow入门:数据结构和编程思想

引言: 最近tensorflow很火,看到国内都有不少人开始玩起来了,自己最近有些想法想玩玩,于是开始入门搞一下,因为自己只有一个台式电脑,于是就装了个cpu版的tensorflow,安装过程挺顺利,一两句命令搞定,最后遇到过glibc的版本问题,直接升级了Ubuntu版本就好了。 于是,开始入门了。下面是我学习的笔记,水平有限,如有不对,敬请指教。

在tensorflow框架下,定义了tensor这么一个数据结构,她是可以任意n维空间的数据表达,这个n称之为tensor的阶,0阶的就是一个数,1阶的就是一个向量,2阶就是一个矩阵,3阶就是一个立方体,等等。

tensorflow展示模型网络结构 tensorflow输出网络结构_机器学习

当然,tensor中里面的数据类型可以指定,比如float32,int32等。Tensorflow的编程思想主要是如下几点:

tensorflow展示模型网络结构 tensorflow输出网络结构_数据挖掘_02

综合来说,就是用tensor定义了一堆数据,里面可以有常量也可以有变量,然后用一个个operation表示计算步骤,这些operation节点连起来构成了一个graph表示计算任务。graph可以有多个,但对于大部分程序一个graph就够了,作为初学者,可以忽略多graph的情况,tensorflow会提供一个默认的graph。graph定义好,计算并不会马上执行,需要通过session来启动graph的执行。Session中的每一次计算operation,都可以通过fetch的方式把对应的tensor返回作为计算结果。而传给计算operation的参数,可以直接用变量或者常量的名字,也可以通过feed的形式传参。实例1:

下面是两个向量点乘的实例,展示了基本的operation和graph定义,以及session启动。

tensorflow展示模型网络结构 tensorflow输出网络结构_tensorflow展示模型网络结构_03

执行结果:

tensorflow展示模型网络结构 tensorflow输出网络结构_数据挖掘_04

实例2:

下面是用变量表示graph计算的状态信息的实例,值得关注的是,operation之间的依赖关系。

tensorflow展示模型网络结构 tensorflow输出网络结构_数据挖掘_05

tensorflow展示模型网络结构 tensorflow输出网络结构_机器学习_06

从代码中可以看到,我们只是显示执行了update这个operation,但是没有显示执行new_value这个operation,不过通过执行结果可以判断,new_value这个operation的确是触发执行了,也许是state每次变化时检查到依赖立刻触发new_value这个operation的执行,也许是要执行update这个operation时发现有个依赖的new_value这个operation需要触发。按照目前的理解,更加倾向于后者,有点类似编程中的闭包的概念。实例3:

下面是一个通过fetch机制,把tensor作为结果返回的实例

tensorflow展示模型网络结构 tensorflow输出网络结构_深度学习_07

tensorflow展示模型网络结构 tensorflow输出网络结构_深度学习_08

实例4:

下面是一个通过feed机制把参数传进计算operation的实例

tensorflow展示模型网络结构 tensorflow输出网络结构_机器学习_09

tensorflow展示模型网络结构 tensorflow输出网络结构_tensorflow展示模型网络结构_10

实例5:

线性回归经典实例

tensorflow展示模型网络结构 tensorflow输出网络结构_机器学习_11

值得注意的是,在tensorflow里面实现线性回归,只需要把预测模型和损失函数定义好基本就可以了,里面有梯度下降优化器帮你求解,不必自己再写。

tensorflow展示模型网络结构 tensorflow输出网络结构_tensorflow展示模型网络结构_12

参考资料: 张量的阶、形状、数据类型 http://wiki.jikexueyuan.com/project/tensorflow-zh/resources/dims_types.html

Tensorflow基本使用 http://wiki.jikexueyuan.com/project/tensorflow-zh/get_started/basic_usage.html

Tensorflow简介 http://wiki.jikexueyuan.com/project/tensorflow-zh/get_started/introduction.html

Tensorflow变量:创建、初始化、保存和加载 http://wiki.jikexueyuan.com/project/tensorflow-zh/how_tos/variables.html

linear_regression https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/2_BasicModels/linear_regression.py

入门级解读:小白也能看懂的TensorFlow介绍 http://it.sohu.com/20170221/n481292094.shtml

TensorFlow入门一 http://hacker.duanshishi.com/?p=1639

本文作者:linger