01 tensorflow中张量维度—Shape参数理解

\quad 在tensorflow中所有数据都是以张量(tensor)这种数据结构的形式表示。初学tensorflow,对于张量维度的理解,做一些笔记。
\quad 先举个栗子:

import tensorflow as tf

a = tf.constant([1.0, 2.0], name='a')
b = tf.constant([2.0, 3.0], name='b')
result = tf.add(a, b, name='add')

print(result)

\quad 运行结果:

Tensor("add:0", shape=(2,), dtype=float32)

\quad 输出是一个tensor,这个没有疑问,让我纳闷的是为什么输出是 shape=(2,) \textbf{shape=(2,)} shape=(2,)。但是在我的直观理解中,不是应该输出 shape=(1,2) \textbf{shape=(1,2)} shape=(1,2)吗?表示一行两列。
\quad 之后查阅了一些资料,发现张量的维度shape的参数,不是像矩阵的shape那样。应该这样理解:shape参数的个数应为维度数,每一个参数的值代表该维度上的长度。
\quad 比如上面栗子中的shape=(2,),在括号内只有一个参数,说明张量result的维度是1,参数值是2,表示在这个维度上有两个值。即张量result是一个一维数组,这个数组的长度是2。
\quad 再多举几个栗子:

a = tf.constant(1)
b = tf.constant([1, 2, 3])
c = tf.constant([[1,2],[3,4],[5,6]])
d = tf.constant([[[1,2],[3,4]],[[5,6],[7,8]]])
e = tf.constant([[[1,2,3],[4,5,6]]])

print("a:",a)
print("b:",b)
print("c:",c)
print("d:",d)
print("e:",e)

\quad 运行结果:

a: Tensor("Const_164:0", shape=(), dtype=int32)
b: Tensor("Const_165:0", shape=(3,), dtype=int32)
c: Tensor("Const_166:0", shape=(3, 2), dtype=int32)
d: Tensor("Const_167:0", shape=(2, 2, 2), dtype=int32)
e: Tensor("Const_168:0", shape=(1, 2, 3), dtype=int32)
a:维度为0的一个标量
b:维度为1,长度为3
c:维度为2,第一个维度长度为3,第二个维度长度为2
d:维度为3,第一个维度长度为2,第二个维度长度为2,第三个维度长度为2
e:维度为3,第一个维度长度为1,第二个维度长度为2,第三个维度长度为3

\quad 其中第几个维度的长度,就是左数第几个中括号组之间的元素总数量

\quad 再举几个栗子:

  1. 对 于 e : [ [ [ 1 , 2 , 3 ] , [ 4 , 5 , 6 ] ] ] 对于e:[[[1,2,3],[4,5,6]]] e:[[[1,2,3],[4,5,6]]]

    第 一 个 维 度 : 第 一 个 括 号 内 的 元 素 是 : [ [ 1 , 2 , 3 ] , [ 4 , 5 , 6 ] ] ⏟ e l e m e n t , 所 以 第 一 维 长 度 是 1 。 第一个维度:第一个括号内的元素是: \underbrace{[[1,2,3],[4,5,6]]}_{element} ,\\所以第一维长度是1。 :element [[1,2,3],[4,5,6]]1

    第 二 个 维 度 : 第 二 个 括 号 内 的 元 素 是 : [ 1 , 2 , 3 ] ⏟ e l e m e n t , [ 4 , 5 , 6 ] ⏟ e l e m e n t , 所 以 第 二 维 长 度 是 2 。 第二个维度:第二个括号内的元素是:\underbrace{[1,2,3]}_{element},\underbrace{[4,5,6]}_{element},\\所以第二维长度是2。 :element [1,2,3],element [4,5,6]2

    第 三 个 维 度 : 第 三 个 括 号 内 的 元 素 是 : 1 ⏟ e l e m e n t , 2 ⏟ e l e m e n t , 3 ⏟ e l e m e n t , 所 以 第 三 维 长 度 是 3 。 第三个维度:第三个括号内的元素是: \underbrace{1}_{element},\underbrace{2}_{element},\underbrace{3}_{element},\\所以第三维长度是3。 :element 1,element 2,element 33

  2. 对 于 d : [ [ [ 1 , 2 ] , [ 3 , 4 ] ] , [ [ 1 , 2 ] , [ 3 , 4 ] ] ] 对于d:[[[1,2],[3,4]],[[1,2],[3,4]]] d:[[[1,2],[3,4]],[[1,2],[3,4]]]

    第 一 个 维 度 : 第 一 个 括 号 内 的 元 素 是 : [ [ 1 , 2 ] , [ 3 , 4 ] ] ⏟ e l e m e n t , [ [ 5 , 6 ] , [ 7 , 8 ] ] ⏟ e l e m e n t 所 以 第 一 维 长 度 是 2 。 第一个维度:第一个括号内的元素是: \underbrace{[[1,2],[3,4]]}_{element},\underbrace{[[5,6],[7,8]]}_{element}\\所以第一维长度是2。 :element [[1,2],[3,4]],element [[5,6],[7,8]]2

    第 二 个 维 度 : 第 二 个 括 号 内 的 元 素 是 : [ 1 , 2 ] ⏟ e l e m e n t , [ 3 , 4 ] ⏟ e l e m e n t 所 以 第 二 维 长 度 是 2 。 第二个维度:第二个括号内的元素是:\underbrace{[1,2]}_{element},\underbrace{[3,4]}_{element}\\所以第二维长度是2。 :element [1,2],element [3,4]2

    第 三 个 维 度 : 第 三 个 括 号 内 的 元 素 是 : 1 ⏟ e l e m e n t , 2 ⏟ e l e m e n t 所 以 第 三 维 长 度 是 2 。 第三个维度:第三个括号内的元素是: \underbrace{1}_{element},\underbrace{2}_{element}\\所以第三维长度是2。 :element 1,element 22


补充:个人觉得关于tensor讲的比较好的一篇文章:
你真的懂TensorFlow吗?Tensor是神马?为什么还会Flow?

你可能感兴趣的:(TensorFlow)