Assignment 1: https://cs231n.github.io/assignments2024/assignment1/
Assignment 1
This assignment is due on Friday, April 19 2024 at 11:59pm PST. Starter code containing Colab notebooks can be downloaded here. Setup Please familiarize yourself with the recommended workflow by watching the Colab walkthrough tutorial below: Note. Ensure y
cs231n.github.io

train data와 test data(X) 간의 유클리드 거리를 계산하여 비교
def compute_distances_two_loops(self, X):
num_test = X.shape[0]
num_train = self.X_train.shape[0]
dists = np.zeros((num_test, num_train))
for i in range(num_test):
for j in range(num_train):
# *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****
dists[i, j] = np.sqrt(np.sum(np.power(self.X_train[j] - X[i], 2)))
# *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****
return dists
def compute_distances_one_loop(self, X):
num_test = X.shape[0]
num_train = self.X_train.shape[0]
dists = np.zeros((num_test, num_train))
for i in range(num_test):
# *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****
dists[i] = np.sqrt(np.sum(np.power(self.X_train - X[i], 2), axis=1))
# *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****
return dists
def compute_distances_no_loops(self, X):
num_test = X.shape[0]
num_train = self.X_train.shape[0]
dists = np.zeros((num_test, num_train))
# *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****
dists = np.sqrt(
-2 * (X @ self.X_train.T) +
np.power(X, 2).sum(axis=1, keepdims=True) +
np.power(self.X_train, 2).sum(axis=1, keepdims=True).T
)
# *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****
return dists
당연하게도 loop가 많을수록 계산시간이 늘어난다.(해당 실험은 코드상 구현되어있으나 생략)
train label에서 k개의 가장 가까운 sample을 찾은 후 가장 많이 나타난 class로 예측
def predict_labels(self, dists, k=1):
num_test = dists.shape[0]
y_pred = np.zeros(num_test)
for i in range(num_test):
closest_y = []
# *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****
closest_y = self.y_train[dists[i].argsort()[:k]]
# *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****
# *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****
y_pred[i] = np.argmax(np.bincount(closest_y))
# *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****
return y_pred

여기서 cross-validation을 통해 최적의 k를 찾는 실험도 있으나 이 또한 생략하였다.
참고 : https://github.com/mantasu/cs231n/blob/master/assignment1/knn.ipynb
'Computer Vision > CS231N' 카테고리의 다른 글
[CS231N] Assignment 3 Q1. Image Captioning with Vanilla RNNs (0) | 2025.04.03 |
---|