** PART.0 長相離譜的張量轉置**
注:此轉置操作與 t-product 積相對應,在其他類型張量運算中的轉置操作可能有不同的定義方式,請注意區分。

簡單描述一下:
我們把三維張量每一個frontal slices(面向我們的切片),進行轉置,然后將序號2到n的切片順序完全反過來,圖片描述如下:
假如以下為原始張量:

轉置完成后:

那么。。。為什么會有如此的操作呢,其實這都是為了之后的張量inside product做準備(不叫做內積是因為有某些性質不符合內積的定義),和向量內積很像,張量內積也需要其中某個張量轉置之后和另一個張量做 t-product 積,既然是做 t-product 積,就要遷就于 t-product 積的某些性質。
這里再重提一下 t-product 積的定義:

** PART.1 轉置的特殊性質**
首先說明一下 squeeze 操作及 twist, 簡單一張圖就可以描述:


這都可以相等。。very amazing 啊 ,光證明出來咋能不驗證呢?
** PART.2 MATLAB實現**
我們編寫如下 MATLAB 程序(引用的子函數放到最后):
X=zeros([2,1,3]);
X(:,:,1)=[1;2];
X(:,:,2)=[3;4];
X(:,:,3)=[5;6];
c=zeros([1,1,3]);
c(:)=[1,2,3];
squeeze(t_prod(X,c))
squeeze(X)*bcirc(t_T(c))
ans =
20 20 14
26 26 20
ans =
20 20 14
26 26 20
左右兩邊運行結果一致,非常完美,另外各個子函數如下:
t-product
function C=t_prod(A,B)
% @author:slandarer
% 用于進行張量t-product積
% A*B=fold(bcirc(A)·unfold(B))
% 獲取張量大小
[l,p,n]=size(A);dimA=[l,p,n];
[p,m,n]=size(B);dimB=[p,m,n];
dimC=[l,m,n];
if dimA(2)~=dimB(1) || dimA(3)~=dimB(3)
error('Inner tensor dimensions must agree.');
end
% 對A,B進行unfold展開操作
ufold_A=reshape(permute(A,[2,1,3]),dimA(2),[])';
ufold_B=reshape(permute(B,[2,1,3]),dimB(2),[])';
% 對A構建循環矩陣
bcirc_A=zeros([l*n,p*n]);
for i=1:n
bcirc_A(:,(1:p)+(i-1)*p)=circshift(ufold_A,l*(i-1),1);
end
% bcirc(A)·unfold(B)
AB=bcirc_A*ufold_B;
% 還原張量維度
C=ipermute(reshape(AB',dimC([2,1,3])),[2,1,3]);
end
張量轉置
function AT=t_T(A)
% @author:slandarer
% 應對與張量t-product積的轉置
[l,m,n]=size(A);
AT=zeros([m,l,n]);
% fronral slices轉置
for i=1:size(A,3)
AT(:,:,i)=A(:,:,i)';
end
% 徑向重排序
if size(A,3) >1
AT(:,:,1:end)=AT(:,:,[1,end:-1:2]);
end
end
squeeze
function squeezeX=squeeze(X)
% @author:slandarer
% lateral slice 翻轉
if size(X,2)==1
squeezeX=permute(X,[1,3,2]);
else
error('MyComponent:incorrectType',...
'Error input: nInput must be a lateral slice.')
end
end
bcirc
function bcircA=bcirc(A)
% @author:slandarer
% 用于張量展開為循環矩陣
% 獲取張量大小
[l,p,n]=size(A);dimA=[l,p,n];
% 對A進行unfold展開操作
ufold_A=reshape(permute(A,[2,1,3]),dimA(2),[])';
% 對A構建循環矩陣
bcircA=zeros([l*n,p*n]);
for i=1:n
bcircA(:,(1:p)+(i-1)*p)=circshift(ufold_A,l*(i-1),1);
end
end
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
MATLAB仿真
+關注
關注
4文章
176瀏覽量
20928 -
交換矩陣
+關注
關注
0文章
4瀏覽量
5528
發布評論請先 登錄
相關推薦
熱點推薦
求助,實現一下矩陣的轉置函數
)mean2(x);m=blkproc(y,[2,2],f) ;r=m(:);end這是一個函數,實現矩陣y(輸入為列向量)的四鄰域平均,求高手幫忙實現轉置矩陣的函數。也就是如果這個函數的功能可以用A*y,表示,那個要求編寫一個
發表于 03-07 10:10
【MATLAB使用心得匯總——Tips 1-5 】
以知識點的形式,羅列MALAB日常應用中的技巧操作。1MATLAB的四大金剛:矢量運算; 圖形化顯示; 工具箱;Simulink;2 注意共軛轉置和
發表于 12-04 14:21
ADC采樣不精確,飄的離譜
定義一個u32的變量,對采樣到的數據做處理,*3300再/4096,通過串口看,,一個2V的方波,采樣到的數據飄的離譜,這是為什么、、數據處理有錯嗎?
發表于 06-29 22:26
labview中調用matlab腳本為什么會提示matlab服務器未安裝matlab服務器,但是我的matlab已經打開,這是什么問題
labview中調用matlab腳本為什么會提示matlab服務器未安裝matlab服務器,但是我的matlab已經打開,
發表于 09-02 09:46
轉置型FIR濾波器的實現
相同,濾波器階數為10。 圖1 可以發現轉置型結構不對輸入數據寄存,而是對乘累加后的結果寄存,這樣關鍵路徑上只有1個乘法和1個加法操作,相比于直接型結構,延時縮短了不少?! 【C合得到結果
發表于 06-28 08:22
華為 Mate 9 三周體驗評測:4000mAh續航久的離譜!
“4000mAh續航久的離譜!”這是我使用華為 Mate 9 三周之后,它最能打動我的地方。
發表于 12-13 15:09
?1.2w次閱讀
如何使用基于轉置卷積操作改進進行單階段多邊框目標檢測方法
針對單階段多邊框目標檢測( SSD)模型在以高交并比(IoU)評估平均檢測精度(mAP)時出現的精度下降問題,提出一種使用轉置卷積操作構建的循環特征聚合模型。該模型以SSD模型為
發表于 12-12 11:49
?4次下載
MATLAB | 這是我見過最離譜的轉置操作
評論