2019-03-09

2019-03-09  本文已影响0人  一叶逐寒水

数据流图介绍:

·节点(node) : 在数据流图的语境中, 节点通常以圆圈、 椭圆和方框表示, 代表了对数据所做的运算或某种操作。 在上例中, “add”对应于一个孤立节点。

·边(edge) : 对应于向Operation传入和从Operation传出的实际数值, 通常以箭头表示。 在“add”这个例子中, 输入1和2均为指向运算节点的边, 而输出3则为

从运算节点引出的边。 可从概念上将边视为不同Operation之间的连接, 因为它们将信息从一个节点传输到另一个节点。

Operation:在TensorFlow中, 数据流图中的每个节点都被称为一个Operation(简记为Op) 。 各Op可接收0个或多个Tensor对象作为输入, 并输出0个或多个Tensor对象。 要创建一个Op, 可调用与其关联的Python构造方法, 在本例中, tf.constant() 创建了一个“常量”Op, 它接收单个张量值, 然后将同样的值输出给与其直接连接的节点。

          在数据流图中, 节点之间的某些类型的连接是不被允许的, 最常见的一种是将造成循环依赖(circular dependency) 的连接。直接依赖和间接依赖

张量:

         即n维矩阵的抽象。 因此, 1D张量等价于向量, 2D张量等价于矩阵, 对于更高维数的张量, 可称“N维张量”或“N阶张量”。可将张量视为一种以结构化格式保存任意数据的方式。

(1)TensorFlow数据类型

        在Python中, 所有整数都具有相同的类型, 但TensorFlow却有8位、 16位、 32位和64位整数类型之分。 当将数据传入TensorFlow时, 虽有一些方法可将数据转化为恰当的类型, 但某些数据类型仍然可能难以正确地声明, 例如复数类型。 因此, 更常见的做法是借助NumPy数组手工定义Tensor对象。

(2)NumPy数组

        TensorFlow的数据类型是基于NumPy的数据类型的。 实际上, 语句np.int32==tf.int32的结果为True。 任何NumPy数组都可传递给TensorFlow Op, 而且其美妙之处在于可以用最小的代价轻易地指定所需的数据类型。

(3)字符串数据类型:

        对于数值类型和布尔类型, TenosrFlow和NumPy dtype属性是完全一致的。 然而, 在NumPy中并无与tf.string精确对应的类型, 这是由NumPy处理字符串的方式决定的。 也就是说, TensorFlow可以从NumPy中完美地导入字符串数组, 只是不要在NumPy中显式指定dtype属性。有一个好处是, 在运行数据流图之前或之后, 都可以利用NumPy库的功能, 因为从Session.run方法所返回的张量均为NumPy数组。

(3)张量的形状:

        在整个TensorFlow库中, 会经常看到一些引用了某个张量对象的“shape”属性的函数和Op。 这里的“形状”是TensorFlow的专有术语, 它同时刻画了张量的维(阶)数以及每一维的长度。 张量的形状可以是包含有序整数集的列表(list) 或元组(tuple) : 列表中元素的数量与维数一致, 且每个元素描述了相应维度上的长度。 例如, 列表[2, 3]描述了一个2阶张量的形状, 其第1个维上的长度为2, 第2个维上的长度为3。 注意, 无论元组(用一对小括号包裹) , 还是列表(用一对方括号包裹) , 都可用于定义张量的形状。

    除了能够将张量的每一维指定为固定长度, 也可将None作为某一维的值, 使该张量具有可变长度

(4)获取某个张量的形状:

        tf.shape Op的输入为希望获取其形状的Tensor对象, 输出为一个int32类型的向量。请记住, 与其他Op一样, tf.shape只能通过Session对象得到执行。

再次提醒: 张量只是矩阵的一个超集!

上一篇下一篇

猜你喜欢

热点阅读