[CS 231n] Linear Classification Softmax 과제(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

이번 과제는 기본적으로 전에 포스팅한 SVM 과제와 유사하므로 코드 작성부분에 대해서만 올리겠습니다.

Softmax_loss_naive

    1. loss


    1) scores[i, :] = X[i, :].dot(W)

    2) scores -= max(scores) 
(Softmax는 x.dot(W)의 결과가 지수로 올라가므로 컴퓨터가 처리하기에 너무 큰 수입니다. 이를 해결하기 위해 가장 큰 수를 빼주는 작업이 필요합니다.)

    3) exp(scores)

    4) loss += -log( scores[y[i]] / sum(scores) )

    5) loss /= num_train
       loss += reg*sum(W^2)

    2. dW


softmax_loss_vectorized

    1. loss

    

    1) scores = X.dot(W)

    2) scores의 각 행 중 최대값을 행 별로 뺀다.

    3) exp(scores)

    4) 분자: 각 행에 따른 scores y[i]열 
       분모: np.sum(scores, axis=1)

    5) 4)의 결과 sum
        loss /= num_train
        loss += reg*sum(W^2)

    2. dW

    idea: x.T와 scores 벡터를 곱한다. (dL(i)/dW(j)=x[i, :]scores[i, j]/ sum(scores[i])



Cross validation

SVM과 동일하게 코드를 작성하면 됩니다.


이 블로그의 인기 게시물

[CS231n] Features 과제(Assignment)

[minGPT]play_image 설명

[CS231n] lecture 4. backpropagation 강의 요약