728x90
반응형
Einstein summation
numpy, torch, tensorflow 등 다양한 Tensor Type의 형태를 변형할 때 주로 사용된다. 현재는 einops와 코드를 함께 작성하면 정말 모든 이가 알아볼 수 있을 설명서 같은 모델을 작성할 수 있다.
Example)
Attention에서 energy를 구할때 Q 와 K^T의 행렬곱시 Key 부분의 Transpose를 쉽게 표현 가능
quries = torch.tensor(np.array([i for i in range(0,240)]).reshape(1,2,6,20),dtype=torch.float64)
keys = torch.tensor(np.array([i*2 for i in range(0,240)]).reshape(1,2,6,20),dtype=torch.float64)
energy = torch.einsum('bhqd, bhkd -> bhqk', quries, keys)
print(energy.size())
print(f'att {F.softmax(energy, dim=-1).size()}')
#torch.Size([1, 2, 6, 6])
#att torch.Size([1, 2, 6, 6])
Vision in Transformer: 1 X 3 X 224 X 224의 이미지에서 16 X 16의 kernel을 거친 Shape를 표현할때도 직관적으로 코드에 명시할 수 있다.
b (h k1) (w k2) c -> b (h w) (c k1 k2)
patch_size = 16 # paper default
## 1, 3, 224 ,224 -> 1, (14x16=224) (14x16=224) -> 1, (14 14) (16 16 3)
patches = rearrange(x, 'b c (h k1) (w k2) -> b (h w) (k1 k2 c)',k1=patch_size, k2= patch_size)
반응형
'Deep Learning' 카테고리의 다른 글
[mac] VToonify [...ing] (0) | 2023.01.15 |
---|---|
ViT(Vision in Transformer) Review (0) | 2022.12.19 |
[Computer Vision] Image Modul Pillow import Error (0) | 2022.12.14 |
[Model Train Error] 모델 학습 시 무한 루프 /Unknown batch (0) | 2022.05.25 |
[Kaggle ImageClassification] Image Training Trick (0) | 2022.05.24 |