P-stage4 [day7] (7강) 모델최적화기법(2); Tensor Decomposition 실습
과거의 것들/AI Tech boostcamp

P-stage4 [day7] (7강) 모델최적화기법(2); Tensor Decomposition 실습

강의내용

(7강) 모델최적화기법(2); Tensor Decomposition 실습

앞에서 설명 못했던 Fiber와 Slice 개념.

후엔 Tensor Unfolding, Cp decomposition, Tucker decomposition 개념 복습.

C-order, Fortran-order, tensorly에서의 차이.. 등 자세한건 pdf

각자 따로 구해서 엮어줘서 Tensor를 구한다고 생각하면 된다.

예시

MSE가 0.28, 0.33정도면 많은 거라고 한다. 여기서 생각할 수 있는 이유는 rank가 적기 때문에, filter값의 분포가 1보다 엄청 큰것과 -로도 크고 해서 range가 크다보니 혼란이 있는 듯.

실제 Conv2d를 줄여보자

여기 논문에서 정의한 Tucker-2 decomposotion은 4 dim tensor가 있으면 원래는 4방향 크기를 다 줄여서 4dim의 core tensor를 만들지만 conv에서 h, w는 비교적 크기가 3,5로 작기때문에 h,w는 남겨두고 in, out에 대해서만 줄여서 core를 만든다.

U(3)의 S x R3인데 S는 input channel의 개수, R3는 그것에 대해 approximation하려는 차원 수 혹은 값.

T는 output channel의 개수, R4는 그 output channel에 대해서 approximation 하려는 rank 의 차원수 개수.

그래서 결국 C는 D D R3 R4가 된다.

마지막 행렬 차원만 잘 맞춰주면 됨

mode가 0, 1인 이유는 conv 차원이 [in, out, h, w] 가 되는데 Tucker-2를 사용하기로 했으니 h, w는 그대로 두는거.

마지막엔 vgg16으로 쪼개는거 나옴. sequential로 위에서 곱했던 과정을 그대로 넣는다. pdf 보자.

프로젝트 진행한거

yaml으로 shufflenet v2 x0.5 그대로 불러와서 torchvision 에서 pretrained 불러오는거까지 했다.

ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design

단지 걱정이 되는건 pretrained 불러올 때 state_dict을 불러올 때 나오는 모듈 갯수에 맞춰서 한거라 조금 불안하긴 함.