※ 본 내용은 stanford에서 제공하는 cs231n 강의, 강의자료를 바탕으로 작성하였습니다.

 

Assigment1 - Q1에서는 KNN 을 통한 image classification과 cross-vallidation을 다루고 있다.

 

● Data, Setup

먼저 CIFAR10 데이터를 읽어오고, train data와 test data로 나누는 코드가 작성되어 있다.

데이터 일부 출력
data shape

load한 데이터셋 자체는 50000/10000 개로 나뉘지만 그 중 5000/500개씩 추출하여 사용한다.

또한 32x32x3 크기의 이미를  모두 vector 로 변경한다.

 

 

● KNN

train

먼저 train을 진행한다. KNN에서 train은 단순히 데이터를 기억하는 것이다.

 

(1) distances_two_loops

가장 먼저 distance를 2개의 loop를 이용해서 계산하는 함수를 구현하면 된다.

X_test는 500개, 비교할 train 데이터는 5000개이므로,  dists.shape = (500, 5000)이다.

 

distance_two_loops

L2 distance를 구하는 코드로, 2중 for문을 이용하여 직관적이다. 따라서 별도의 설명은 생략하겠다.

 

Inline Question1

dists 출력, Inline Question1

dist를 직관적으로 출력한 그림과 이어지는 Inline Question1이다.

밝을 수록 dist가 먼 것인데, 가로나 세로로 생긴 흰 선이 왜 생긴 것인지에 대한 질문이다.

 

Answer)

row : 대부분의 train image와 다른 test image가 존재하기 때문.

column : 대부분의 test image와 다른 train image가 존재하기 때문.

 

처음엔 위와 같이 직관적으로 설명했었는데, 결과적으로 저 내용이 이상치를 의미한다고 정리할 수 있겠다. 

 

2) predict_lables

다음으로 dists를 보고 predict를 진행하는 predict_labels함수를 작성하면 된다. 

predict_labels

np.argsort를 이용하고 그 결과로 indexing하는 방식으로 구현하였다. 

 

Inline Question 2

 

 

(3) distance with one loop

compute_distances_one_loop

각 test 데이터에 대해서 broadcasting을 이용해서 L2 distance를 계산한다. broadcasting만 적용하면 돼서, 크게 어렵진 않다.

 

 

(4) distance by fully vectorized code

compute_distances_no_loops

for 문을 사용하지 않고 dists를 계산하는 코드이다. 

 

앞서 for문을 이용한 방식과 달리 직관적이지 않다.

HINT에 나와있는대로, 한번의 multiplication과 2개의 broadcasting을 이용하였다. 

 

먼저 dists가 계산되는 것을 수식으로 정리하는 것이 도움이 되었다.

dists의 i행 j열은 다음가 같이 일반화할 수 있다. 

위 수식을 이해하고 코드를 보면 어렵지 않게 이해할 수 있다.

i행의 모든 원소에는 $ x^{(i)}$ 의 크기를 더해주고 j열의 모든 원소에는 $ x_{train}^{(j)}$ 의 크기를 더해주는 것이 broadcasting으로 구현되어 있고, 마지막으로 $ x^{(i)}$와 $ x\_train^{(j)}$의 내적은 X와 Xtrain.T의 곱으로 계산하여 더해주면 된다. 

 

 

(5) cross validation

다음으로 cross validation을 구현하는 문제가 있었는데, 단순 구현 문제이므로 생략하겠다.

앞으로도 과제의 경우 수행하는데 어려움이 있었던 부분만 정리할 계획이다. 

 

Inline Quest 3

'Computer Vision > cs231n' 카테고리의 다른 글

[Lec 4] Backpropagation and Neural Network  (0) 2021.12.30
[Assignment1 - Q3] Softmax  (0) 2021.12.30
[Assignment1 - Q2] SVM  (0) 2021.12.30
[Lec 3] Loss Functions and Optimization  (0) 2021.12.30
[Lec2] KNN, Linear Classifier  (0) 2021.12.29

+ Recent posts