1.tensor的维度理解

通过tf.rank()函数可以查看tensor的维度。先看一个例子:

import tensorflow as tf
a = tf.constant(6) #常量-dim=0
b = tf.constant([3, 3]) #数组-dim=1
c = tf.constant([[6, 3]]) #矩阵-dim=2
d = tf.constant([[[2, 2]]])  #矩阵-dim=3可以想象为空间坐标系 xyz三个轴

sess = tf.Session() #启动图运算,打印tensor的值
print sess.run(tf.rank(a))
print sess.run(tf.rank(b))
print sess.run(tf.rank(c))
print sess.run(tf.rank(d))
输出:
0
1
2
3

辅助理解tensor的维度,tf.shape()方法获得tensor的形状,shape()方法返回每一个rank上的维度(这里的维度指元素个数)。看下面例子,当shape()返回list = [1  1  2]时,这里list[0]是一个维度,这个维度的元素个数是1,是这里的[[2, 2]],list[1]是一个维度,这个维度的元素个数是1,是这里的[2, 2],list[2]是一个维度,这个维度的元素个数是2个,是这里的2和 2。

import tensorflow as tf
a = tf.constant(6)
b = tf.constant([3, 3])
c = tf.constant([[6, 3]])
d = tf.constant([[[2, 2]]])

sess = tf.Session()
print sess.run(tf.shape(a))
print sess.run(tf.shape(b))
print sess.run(tf.shape(c))
print sess.run(tf.shape(d))
输出:
[]
[2]
[1 2]
[1 1 2]

2.dim=0的标量

维度为0的Tensor为标量。定义标量的方式很简单,只要在tensor函数中传入一个标量初始化的值即可。标量一般用在Loss这种地方。

3.dim=1的张量

dim=1相当于只有一个维度,但是这个维度上可以有多个分量(就像一维数组一样).上面例子中的b,可以视作b=[3, 3],就是一个以为数组。dim=1的Tensor一般用在Bais这种地方,或者神经网络线性层的输入Linear Input,例如MINST数据集的一张图片用shape=[784]的Tensor来表示。

4.dim=2的张量

dim=2的张量一般用在带有batch的Linear Input,例如MNIST数据集的k张图片如果放再一个Tensor里,那么shape=[k,784]

5.dim=3的张量

dim=3的张量很适合用于RNN和NLP,如20句话,每句话10个单词,每个单词用100个分量的向量表示,得到的Tensor就是shape=[20,10,100]。

6.dim=4的张量

dim=4的张量适合用于CNN表示图像,例如100张MNIST手写数据集的灰度图(通道数为1,如果是RGB图像通道数就是3),每张图高=28像素,宽=28像素,所以这个Tensor的shape=[100,1,28,28],也就是一个batch的数据维度:[batch_size,channel,height,width]。

2.axis的使用

axis=0按列求均值

axis=1按行求均值

# 'x' is [[1, 1, 1]
#         [1, 1, 1]]
tf.reduce_sum(x) ==> 6
tf.reduce_sum(x, 0) ==> [2, 2, 2]
tf.reduce_sum(x, 1) ==> [3, 3]

参考:
1.tensor的维度:https://blog.csdn.net/weicao1990/article/details/93204452

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐