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(能夠想象爲解一元方程組,有一個未知數時方程有特解,有兩個未知數時方程的解不定)

相關文章
相關標籤/搜索