tensor維度本質就是逐層脫去括號。
脫第一層括號後,緊挨着的一層整體只有一個元素,故爲1
脫掉第二層括號後,裏面整體有三個元素,即三行
脫掉第四層,裏面整體依然有三個元素,比如[1],[2],[3]
再往裏面看,只有一個元素
故最後得到的是1*3*3*1。
越高層的維度在越裏面,具體到深度學習裏,如tf.nn.embedding_lookup(itememb, batchitem)。在embedding這一層的數據維度是最高的。在batch這一層的數據維度是最低的(axis=0)。舉例:如果一個人有多個興趣tag(最大個數爲100),每個tag的embedding維度爲32,訓練時batch大小爲1000,則tf.nn.embedding_lookup(itempref, batchpref)的維度shape爲(1000,100,32)
關於reduce_xxx的維度問題
對於k維tensor,
tf.reduce_xxx(x, axis=k-1)的結果是對最裏面一維所有元素進行求和。
tf.reduce_xxx(x, axis=k-2)是對倒數第二層裏的向量對應的元素進行求和。
tf.reduce_xxx(x, axis=k-3)把倒數第三層的每個向量對應元素相加
拿reduce_mean做驗證
[[[ 1. 1.]
[ 2. 2.]]
[[ 3. 3.]
[ 4. 4.]]]
axis=2,做最內層計算,我們的最內層就是(1,1),(2,2),(3,3),(4,4),計算出來的就是
[[ 1. 2.] [ 3. 4.]]
axis=1,做倒數第二層計算
[[ 1.5 1.5] [ 3.5 3.5]]
axis=0,做倒數第三層計算
[[ 2. 2.] [ 3. 3.]]