Tensorflow张量的形状表示方法

对输入或输出而言:dom

一个张量的形状为a x b x c x d,实际写出这个张量时:spa

最外层括号[…]表示这个是一个张量,无别的意义!code

次外层括号有a个,表示这个张量里有a个样本orm

再往内的括号有b个,表示每一个样本的长blog

再往内的括号有c个,表示每一个样本的宽class

再往内没有括号,也就是最内层的括号里的数有d个,表示每一个样本的深度为d方法

tf.nn.conv2d(), tf.reshape()等都是这样表示filter

给一个具体的张量,求这个张量的a,b,c,d值时,首先忽略最外层的括号,再数次外层括号个数(a),再往内(b),再往内(c),最后看最里层的括号内有几个数(d)(各数表明各深度层的值)。di

如:ant

Tensor = tf.constant([[[[1],[2],[ 3]],[[4],[5],[6 ]],[[ 7],[8],[9]]]])  # 也能够不写逗号
# Tensor.shape = (1, 3, 3, 1)

形状为(1, 3, 3, 1)

(看着容易眼花,因此通常竖着写)

Tensor2 = tf.constant([[[[1],[2],[ 3]],[[4],[5],[6 ]],[[ 7],[8],[9]]], [[[1],[2],[ 3]],[[4],[5],[6 ]],[[ 7],[8],[9]]]])
# Tensor2.shape = (2, 3, 3, 1)

形状为(2, 3, 3, 1)   

相似的还有tf.ones(), tf.zeros()

注意!!!

对卷积核来讲,a,b,c,d对应的括号形式虽然相同,但a,b,c,d表明的含义和输入不同!!分别表明长,宽,深,个数!!因此书写时要注意括号的形式!!好比我要写一个长宽分别为2,2,深度为1,个数为1的kernel张量,则它的形状应为(2,2,1,1),而不是(1,2,2,1),用相似tf.random.normal的方法来初始化kernel或weights时也是(长,宽,深,个数)

好比:

filter = tf.constant([[[[1]],
                  [[2]]],
                 [[[ 3]],
                  [[4]]]])

 我想多是和矩阵的乘法(左矩阵和右矩阵的位置)有关

池化层的池化窗口大小ksize形状为[1, height, width, 1]

 

使用tensor.reshape(-1, a, b, c)时,-1表明不指定这一维的大小,由于张量里的元素个数是必定的,其余维的大小肯定后,这一维的大小也随之肯定,但不能在2各维度上使用-1(能够想象为解一元方程组,有一个未知数时方程有特解,有两个未知数时方程的解不定)

相关文章
相关标签/搜索