1. 程式人生 > 程式設計 >Python3 Tensorlfow:增加或者減小矩陣維度的實現

Python3 Tensorlfow:增加或者減小矩陣維度的實現

1.增加維度

下面給出兩個樣例

樣例1:

[1,2,3] ==> [[1],[2],[3]]

import tensorflow as tf

a = tf.constant([1,3])
b = tf.expand_dims(a,1)

with tf.Session() as sess:
 a_,b_ = sess.run([a,b])
 print('a:')
 print(a_)
 print('b:')
 print(b_)

輸出結果

a:
[1 2 3]
b:
[[1]
 [2]
 [3]]

樣例2:

[1,3] ==> [[1,3]]

import tensorflow as tf

a = tf.constant([1,0)

with tf.Session() as sess:
 a_,b])
 print('a:')
 print(a_)
 print('b:')
 print(b_)

輸出結果:

a:
[1 2 3]
b:
[[1 2 3]]

2.降低維度

樣例1:

[[1,3]] ==> [1,3]

import tensorflow as tf

a = tf.constant([[1,3]])
b = tf.squeeze(a)

with tf.Session() as sess:
 a_,b])
 print('a:')
 print(a_)
 print('b:')
 print(b_)

輸出結果

a:
[[1 2 3]]
b:
[1 2 3]

樣例2:

[[1],[3]] ==> [[1,3]

import tensorflow as tf

a = tf.constant([[1],[3]])
b = tf.squeeze(a,b])
 print('a:')
 print(a_)
 print('b:')
 print(b_)

補充知識:pytorch中squeeze()、unsqueeze(),以及一些高維陣列操作

博主最近閱讀YOLO底層程式碼,Torch中對多陣列矩陣有很多高維操作,看過一邊之後,記錄一下,以防忘記。

torch.squeeze()

功能:取消為1的維度

squeeze(input,dim=None,out=None) -> Tensor

這裡一般分不清dim的意思

舉個例子:

input=(A , 1 , B , C ,1 , D)
squeeze(input)=(A,B,C,D)
input= (A,1,B)

squeeze(input,0)=(A,B) 不會改變 squeeze(input,1)=(A,B) 會改變

Python3 Tensorlfow:增加或者減小矩陣維度的實現

這裡0,1 ,2就分別代表 A, 1,B

torch.unsqueeze()

unsqueeze(input,dim,out=None) -> Tensor

功能: 在某一位置插入一維

這裡面也是dim這個引數比較難理解

dim的取值是[- input.dim()-1,imput.dim()]

給定一個dim

input=(A , B , C , D)

input的維度input_dim為4,dim的取值[-5,4]

unsqueeze(input,0)=(1,A , B , C , D)
unsqueeze(input,1)=(A , 1,B , C , D)
unsqueeze(input,-5)=(1,A , B , C , D)

Python3 Tensorlfow:增加或者減小矩陣維度的實現

看一個簡單用例,size表示維度大小,10是取值範圍,a=[:,:,:,4]表示取a最後一維的第四個元素(從0開始第四個),即取[0,3],[5,6,1],[0,8],[…],判斷大於5為true,否則為false。

注意:b的維度比a少了一維。

Python3 Tensorlfow:增加或者減小矩陣維度的實現

繼續上一步,這裡使用unsqueeze函式將b的維度擴充套件一維[2,3]------>[2,3,1] 這時b的最後一維只有一個元素, .expand_as將最後最後的元素擴充套件到a最後一維的個數

a[c] 表示取出為True的所有行在a中的元素

Python3 Tensorlfow:增加或者減小矩陣維度的實現

以上這篇Python3 Tensorlfow:增加或者減小矩陣維度的實現就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。