10分钟快速理解tensorflow结构

2018-10-01  本文已影响0人  pualrdwade

本教程属于基础教程,作者本身也在慢慢学习神经网络的知识,在此只想把一些自己的想法和理解,结合自己的经验写下来给大家做一个参考,新人通过这样一篇'教程大致上可以快速了解tensorflow库的基本结构以及工作流程,适合入门者观看,大约只需要10分钟,我也写的比较简单通俗,希望可以给需要的人带来一些帮助

  1. 张量(tensor)的基本创建与操作
import tensorflow as tf
# 默认的数据类型为int类型
data1 = tf.constant([[1,2,3],[4,5,6]])
print(data1)
Tensor("Const:0", shape=(2, 3), dtype=int32)
# 可以查看张量的类型
print(type(data1))
<class 'tensorflow.python.framework.ops.Tensor'>

可以看到,tensorflow的张量tensor可以使用tf.constant进行创建,实际上是对tensor类构造的封装

# 也可以自己指定数据类型
data2 = tf.constant([[1,3,4],[5,3,2]],dtype=tf.float32)
print(data2)
Tensor("Const_1:0", shape=(2, 3), dtype=float32)

我们可以发现目前打印只能够查看到tensor的属性,并不能看到tensor的值,其实这边是整个tensorflow的核心思想,数据与计算被组织成为一个数据流图,如果想要打印,我们则需要创建这个的一个会话Session,这便是与进行交互的外部接口

# 首先创建session
sess = tf.Session()
# 使用run()方法访问数据节点
print(sess.run(data2))
[[1. 3. 4.]
 [5. 3. 2.]]
  1. 数据流图(Graph)

数据流图是一种常用的并行计算编程模型,并不是针对于深度学习而设计的,数据流图有两个基本的结构:节点,线

tensorflow的整个过程中,tensor(张量)通过线在各个节点之间进行流动传输(flow),由此便得到了生动的名字:tensorflow

  1. 构建计算图

tensor不但可以表示输入输出的端点,同时还可以作为运算单元而存在

# 下面是个例子,定义一个加法单元的tensor并且使用session来运行
import tensorflow as tf
const1 = tf.constant(1.2)
const2 = tf.constant(3.5)
adder = const1+const2
sess = tf.Session()
sess.run(adder)
4.7

可以发现确实是可以作为单独而存在的一个计算单元,我们可以打印查看详细的属性

print(adder)
Tensor("add_1:0", shape=(), dtype=float32)

上面的例子中,我们发现这样是有缺陷的,我们希望在运行的时候给传入参数,输出得到不同的结果,这种情况我们可以使用tensorflow的变量(占位符)(placeholder)来创建我们的结构

# 我们使用变量来构建一个图,同时传入参数得到不同的输出
import tensorflow as tf
v1 = tf.placeholder(tf.float32)
v2 = tf.placeholder(tf.float32)
adder = v1 + v2
# 打印三个节点,查看属性
print(v1)
print(v2)
print(adder)
# 使用session运行,同时传入参数(使用字典的方式传参)
sess = tf.Session()
print(sess.run(adder,{v1:2.2,v2:3.2}))
Tensor("Placeholder_2:0", dtype=float32)
Tensor("Placeholder_3:0", dtype=float32)
Tensor("add_3:0", dtype=float32)
5.4

在此基础上,我们可以使用函数式编程的思想,对构造的tensor进行封装,从而不断构造更加复杂的功能

# 对adder节点构造更加复杂的操作
x = tf.placeholder(tf.float32)
adder_mul_x = adder * x
# 使用session运行
sess = tf.Session()
sess.run(adder_mul_x,{v1:3.9,v2:4,x:2})
15.8

需要注意的是,每次对一个数据流上的节点添加占位符时,使用session运行都要补全所有的placeholder,否则会导致参数错误而报错

上一篇下一篇

猜你喜欢

热点阅读