[CS 231n] Linear Classification SVM 과제(Assignment)

포스팅을 시작하기에 앞서 수준 높은 강의와 강의 자료를 무료로 배포해주신 Stanford University CS231n 교수진께 감사의 말씀을 드립니다. 
온라인 강의: https://www.youtube.com/watch?v=vT1JzLTH4G4&list=PLC1qU-LWwrF64f4QKQT-Vg5Wr4qEE1Zxk 
강의 자료: https://cs231n.github.io

* 블로그 작성자 github 주소: https://github.com/withAnewWorld/JamesHanamura

Assignment 구조

작성되어 있는 부분(파란색), 과제로 주어진 부분(빨간색)

    - 데이터 전처리

    - SVM Classifier
        - svm_loss_naive
        - svm_loss_vectorized

    - Gradient Check(Debugging strategy)
    
    - naive 코드와 vectorized 코드 시간 비교

    - Linear Classifier
        - train
        - predict

    - Loss Function 시각화(Debugging strategy)

    - Cross Validation(learning rate, regularization)

    - Test image 예측

    - 시각화

svm_loss_naive

dW는 loss function을 W로 미분한 결과를 담은 vector입니다.


svm_loss_vectorized

    1) loss

        1) scores[i, :] = sum(max(0, s(j) - s(yi) +1)
        
        2) s(j)= x.dot(W)
        
        3) s(j) - s(yi)
        3-1) s(yi)=0

        4) if scores<0:
            then) scores=0  (np.where함수 사용)
   
        5) loss = np.sum(scores)

        6) loss /= num_train
        6-1) loss += (lambda)*R(W)^2

    2) dW 

        1) if g(W, x) = s(j) - s(yi) +1 >0:
            then) dW[:, i] += x[i, :]
                    dW[:, y[i]] -= x[i, :]

        2) dW /= num_train
            dW += 2*reg*W


Gradient Check


Naive 코드와 vectorized 코드 시간 비교



Linear Classifier

        1) Train


X, y(데이터)의 부분 집합(n=batch_size)를 만들어 각각 저장해야 합니다. 이 때 부분 집합을 이루는 데이터는 임의로 선택(random.choice)해야 합니다.

a: 1-D array like
size: 랜덤 추출하고 싶은 개수
replace: True- 복원 추출, False- 비복원 추출
p: 추출을 할 때에 확률

.

위의 코드에서 주의할 점은 random_choice와 같이 따로 변수를 지정해서 np.random.choice 함수를 호출해야 한다는 점입니다. 만약, 
X_batch=X[np.random.choice(num_train, batch_size, replace=True), :]
y_batch=y[np.random.choice(num_train, batch_size, replace=True)
와 같이 코드를 작성할 경우 두 batch는 서로 짝을 이루지 않게 됩니다.

Gradient Descent



        2) predict


train의 결과로 도출된 Weight vector와 데이터를 곱한 결과 중 가장 높은 점수를 가지는 label을 y_pred에 저장하면 됩니다.

Loss Function 시각화(Debugging Strategy)

Gradient Descent를 통해 Loss function은 점차 감소하는 모습을 보여야 합니다.

Cross Validation(learning rate, Regularization)

변수인 learning rate와 regularization 중 cross validation을 통해 최적의 예측 결과를 보일 것으로 기대되는 weight vector를 찾습니다. 이 때 train은 test image, predict는 validation image를 이용합니다.

Template


train 후 weight vector의 데이터를 image로 바꾸면 위와 같은 결과가 도출됩니다. car클래스를 예시로 보면 train 데이터 안에 빨간색 자동차가 정면을 바라보는 사진이 많이 저장되어 있다는 것을 예측할 수 있습니다. 
 



이 블로그의 인기 게시물

[CS231n] Features 과제(Assignment)

[minGPT]play_image 설명

[CS231n] lecture 4. backpropagation 강의 요약