b, c, d, h, w 형태의 텐서에 대해
각 채널별로 depth를 섞고 싶음
d×d' 의 행렬을 곱해서
b, c, d', h, w 로 만들고 싶은데
(그러니까 총 c*d*d'개의 파라미터가 있음)
제 머리로 생각나는 방법은
x.permute(0, 3, 4, 1, 2).reshape(b*h*w, c, d) 한 다음에
이걸 block matrix로 만들어서 계산하는건데... 이건 0이 너무 많아서 비효율적인 거 같구요..
module list 만들어놓고 for loop 돌리는 것도 썩 좋은 방법 같진 않은데...
괜찮은 방법 없을까요?
일단 걍 모듈리스트 쓰긴 함요...ㅋㅋ
einops 같은걸로 안댐?
x = x.permute(0, 3, 4, 1, 2).unsqueeze(-2) y = (x @ m).squeeze(-2) 한다음 다시 퍼뮤트 하셈
아 정확히는 여기서 m을 sparse matrix로 구현하고 싶ㅇ어요 9*9면 1,1~3,3 / 4,4~6,6 / 7,7~9,9만 값이 있고 나머진 0인
그럼 mat을 Cx9x9 가 아니라 Cx3x3x3쪽으로 만들어서 잘 해보셈 아니면 sparse 연산 지원해주는거 찾아서 써먹어도 될듯
자문자답한다 걍 F.conv3d 가지고 짰음