【Tensorflow】Tensorflow入门运算机制

http://www.tensorfly.cn/ 中文社区

Tensorflow是Google2015年11月9日开源的人工智能系统,也是适合我们进行机器学习开发的常用开发框架,具备更好的灵活性和可延展性。TensorFlow一大亮点是支持异构设备分布式计算,它能够在各个平台上自动运行模型,从手机、单个CPU / GPU到成百上千GPU卡组成的分布式系统。其命名来源于本身的运行原理。Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,TensorFlow为张量从流图的一端流动到另一端计算过程。TensorFlow是将复杂的数据结构传输至人工智能神经网中进行分析和处理过程的系统。

运算机制

正如他的名字Tensorflow一般分为两个阶段:

  • 构造部分,使用tensor表示数据,使用graph来表示计算任务
  • 执行部分,在被称为Session的context里执行图中的计算(使用feed和fetch可以为任意的op赋值或从中获取数据)

计算图

Tensorflow在运行时会产生一个计算图,我们程序中的每一个计算都是计算图上的一个node,我们可以手动通过代码指定,也可以代码默认生成,这个计算图就是我们计算的主要流程。

g = tf.Graph()                 # 创建图实例(对象)
with g.as_default():
  c = tf.constant(250)

张量

张量的理解十分重要,张量是Tensorflow中的重要部分,他就是我们要喂进流程图里面的数据,一个张量主要包含三个属性 名字、维度、类型。举个例子

# 纯量 只有大小
v0 = 786
# 向量 有数据(123)有大小(3个数字)
v1 = [1,2,3]
# 矩阵 二维矩阵
v2 = [[1, 2, 3],
      [4, 5, 6],
      [7, 8, 9]]
# 三维数据 立体矩阵
v3 = [[[2], [4], [6]], 
      [[8], [10], [12]], 
      [[14], [16], [18]]]

可能再往上写就不好想象了,我们其实可以这样理解,一个一阶张量就是向量,然后多个向量摞在一起就变成了二阶张量也就是二位矩阵,由此可知三阶张量就是多个二阶张量落在一起,可以想象一下图片三通道,因为就可以推广到更高维度。
在图片作为数据输入时,常用的shape是 [b, h , w, c] batch_size , height, weight, channel
张量的命名是通过“node:src_output”的形式来给出,node为节点的名称,src_ouput表示当前张量来自节点的第几个输出(编号从0开始)。当计算图构造完成后,可以通过会话(session)来得到张量的计算结果(或者借助eval()),如tf.Session().run(result)。

会话

TensorFlow中的会话(session)用来执行定义好的运算。TensorFlow不会自动生成默认的会话,需要我们使用 tf.Session 操作类,去手动执行相当于运算引擎,我们可以使用代码sess.run()指定计算计算流图中的特定节点。

with tf.Session() as sess:
            sess.run(init)
            loss_v, acc = sess.run([loss, accuracy], feed_dict={X: batch_x, Y: batch_y})

placeholder机制

在前面的计算图中我们说过,tensorflow就是tensor张量在流图中的计算,既然要计算就要把数据张量放到流图中,所以placeholder就是用来让我们把数据放入到图中,相当于在计算图里面定义了个位置,打开了个口子好让我们把指定类型的数据喂进流图,一般要在运行时通过feed_dict来指定

x = tf.placeholder(tf.float32, shape=(3, 2), name="input")
sess.run(y, feed_dict={x:[[0.7, 0.9], [0.1, 0.4], [0.5, 0.8]]})

collection集合

在一个计算图中,可以通过集合(collection)来管理不同类别的资源(可以是张量、变量或者运行Tensorflow程序所需要的队列资源等)。比如通过tf.add_to_collection函数可以将资源加入一个或多个集合中,然后通过tf.get_collection获取一个集合里面的所有资源。 TensorFlow中也自动管理了一些最常用的集合,如:tf.GraphKeys.TRAINABLE_VARIABLES是可学习变量的集合,可通过tf.trainable_variables()获得。

tf.add_to_collection('losses', mse_loss)
loss = tf.get_collection('losses')

猜你喜欢

转载自blog.csdn.net/qq_30615903/article/details/80977108