[CS 231n] Linear Classification SVM 과제(Assignment)
포스팅을 시작하기에 앞서 수준 높은 강의와 강의 자료를 무료로 배포해주신 Stanford University CS231n 교수진께 감사의 말씀을 드립니다.

2) predict
온라인 강의: 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
Linear Classifier
1) Train
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
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 데이터 안에 빨간색 자동차가 정면을 바라보는 사진이 많이 저장되어 있다는 것을 예측할 수 있습니다.