CS231n_Lecture1,2

원성혁·2023년 1월 2일
0

CS231n

목록 보기
1/12
post-thumbnail

취업을 기원하며 스터디를 시작했다...
CS231n을 기반으로 Vision을 공부해보기로 했다.

스터디를 위해 공부해올 부분은 CS231이다.

Data-Driven Approach
1. Collect a dataset of images and labels
2. Use Machine Learning to train a classifier
3. Evaluate the classifier on new images

Nearest Neighbor
Compare images

How fast?
Train O(1) predict O(N)

KNN
Majority vote from K closest points - L1 distance, L2 distance

대충 KNN을 위한 알고리즘 설명인데 정작 KNN에 대해 자세히 다루지는 않는다.. 물론 distance를 쟤는 두가지 방안은 다루지만ㅎ
AI알고리즘의 한 종류이자 가장 기본이라 설명하는 듯 했고 이미지 분류에는 적합하지 않다고 한 부분이 웃겼다. 실제로 original image, boxed image, shifted image 세가지가 L2 distance가 동일하다고 했으니 KNN으로 image classification 은 어렵다고 할 수 있겠다... 여기서 자세한 설명은 없지만 내 생각에는 image 데이터를 oversampling 하는 경우 많은데 전혀 먹히질 않다면ㅎㅎ 이미지 분류에 적합하지 않다고 할 수 있는 것 같다.

Using hyper parameter
1. Choose hyper parameters that work best on the data
2. Split data -> train validation test , cross validation

validation test set의 중요성과 cross validation 기법을 설명했다. 역시 AI 모델링 뿐만 아니라 데이터 관리도 중요하다.

Linear Classification
Parametric Approach
Image -> parameters or wights -> 10 numbers giving class scores

Linear Classifiaction 설명을 나갔다.
전체적으로 stanford 강의는 간결하다. 개요를 설명하는 듯 했다. 아마도 숙제를 통해서 더 공부하는 것 같다.

--Assignment Part--

KNN
K-최근접 이웃(K-Nearest Neighbor, KNN)은 지도 학습 알고리즘 중 하나다.
어떤 데이터가 주어지면 그 주변(이웃)의 데이터를 살펴본 뒤 더 많은 데이터가 포함되어 있는 범주로 분류하는 방식.
또한 사전 훈련이 필요 없는 모델이며 real-time 예측을 진행하며 Lazy-model 이라고 할 수 있다.

과제는 CIFAR-10 데이터를 활용해 KNN 분류를 진행하는 것이다.

KNN코드는 다음과 같다.

import numpy as np

class NearestNeighbor(object):
  def __init__(self):
    pass

  def train(self, X, y):
    """ X is N x D where each row is an example. Y is 1-dimension of size N """
    # nearest neighbor 분류기는 단순히 모든 학습 데이터를 기억해둔다.
    self.Xtr = X
    self.ytr = y

  def predict(self, X):
    """ X is N x D where each row is an example we wish to predict label for """
    num_test = X.shape[0]
    # 출력 type과 입력 type이 갖게 되도록 확인해준다.
    Ypred = np.zeros(num_test, dtype = self.ytr.dtype)

    # loop over all test rows
    for i in range(num_test):
      # i번째 테스트 이미지와 가장 가까운 학습 이미지를
      # L1 거리(절대값 차의 총합)를 이용하여 찾는다.
      distances = np.sum(np.abs(self.Xtr - X[i,:]), axis = 1)
      min_index = np.argmin(distances) # 가장 작은 distance를 갖는 인덱스를 찾는다.
      Ypred[i] = self.ytr[min_index] # 가장 가까운 이웃의 라벨로 예측

    return Ypred

이미지 데이터는 RGB 3차원의 32x32 크기이다. 이를 단일 배열로 만든 후 knn을 계산하는 방식이다. 배열 즉 feature의 크기가 3072이며 train image가 50000개 이니 굉장히 큰 배열이다.
실제로 학습 속도는 굉장히 느리며 결과도 0.2에 머무르는 처참한 결과이다.

그래도 숙제를 완료했다.

profile
AI개발자를 향해 전진중

0개의 댓글