簡體   English   中英

tf.transpose如何在tensorflow中工作?

[英]How tf.transpose works in tensorflow?

tf.transpose(a, perm=None, name='transpose')

轉置一個。 它根據燙發來排列尺寸。 所以,如果我使用這個矩陣進行轉換:

import tensorflow as tt
import os
os.environ["TF_CPP_MIN_LOG_LEVEL"]="3"
import numpy as bb
ab=([[[1,2,3],[6,5,4]],[[4,5,6],[3,6,3]]])
v=bb.array(ab)
fg=tt.transpose(v)
print(v)

with tt.Session() as df:
    print("\n New tranformed matrix is: \n\n{}".format(df.run(fg)))

結果是:

[[[1 2 3]
  [6 5 4]]

 [[4 5 6]
  [3 6 3]]]

 New tranformed matrix is: 

[[[1 4]
  [6 3]]

 [[2 5]
  [5 6]]

 [[3 6]
  [4 3]]]

Process finished with exit code 0

現在,如果我使用perm參數,那么:

import tensorflow as tt
import os
os.environ["TF_CPP_MIN_LOG_LEVEL"]="3"
import numpy as bb
ab=([[[1,2,3],[6,5,4]],[[4,5,6],[3,6,3]]])
v=bb.array(ab)
fg=tt.transpose(v,perm=[0,2,1])
print(v)

with tt.Session() as df:
    print("\n New tranformed matrix is: \n\n{}".format(df.run(fg)))

結果是:

[[[1 2 3]
  [6 5 4]]

 [[4 5 6]
  [3 6 3]]]

 New tranformed matrix is: 

[[[1 6]
  [2 5]
  [3 4]]

 [[4 3]
  [5 6]
  [6 3]]]

Process finished with exit code 0

因此,我很困惑,我有兩個問題:

  • 每當我想轉置一個矩陣時,我必須將perm [0,2,1]作為默認值?
  • 什么是0,2,1這里?

查看numpy.transpose文檔,我們發現transpose接受了參數

axes整數列表,可選
默認情況下,反轉尺寸,否則根據給定的值置換軸。

因此,對於2D情況,默認調用transpose轉換為np.transpose(a, axes=[1,0]) ,或np.transpose(a, axes=[2,1,0])

您希望在此處執行的操作是保持“深度”維度不變的操作。 因此,在軸參數中,深度軸(即第0軸)需要保持不變。 12 (其中1是垂直軸)需要改變位置。 因此,您將軸順序從初始[0,1,2]更改為[0,2,1][stays the same, changes with other, changes with other] )。

在tensorflow,他們出於某種原因改名為axes ,以perm 上面的論點保持不變。

圖片

關於圖像,它們與問題中的數組不同。 圖像的x和y通常存儲在前兩個維度中,而通道最后存儲在[y,x,channel]

為了在2D換位的意義上“轉置”圖像,交換水平和垂直軸,你需要使用

np.transpose(a, axes=[1,0,2])

(通道保持不變,x和y交換)。

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM