바뀜

762 바이트 추가됨 ,  2021년 9월 13일 (월) 13:12
60번째 줄: 60번째 줄:  
원리는 다음 affine 계층에서의 역전파를 참고하자.
 
원리는 다음 affine 계층에서의 역전파를 참고하자.
    +
=== 구현 ===
 +
<syntaxhighlight lang="python">
 +
class SoftmasWithLoss:
 +
    def __init__(self):
 +
        self.loss = None  # 손실함수값을 저장하기 위한 변수.
 +
        self.y = None  # 출력값을 저장하기 위한 변수.
 +
        self.t = None  # 정답레이블
 +
       
 +
    def forward(self, x):
 +
        self.t = t
 +
        self.y = softmax(x)  # 이전에 구현한 소프트맥스 함수값을 넣는다.
 +
        self.loss = cross_entrop_error(self.y, self.t)  # 오차함수로 오차값을 얻는다.
 +
        return self.loss
 +
    def backward(self, dout):
 +
        batch_size = self.t.shape[0]  # 데이터 갯수
 +
        dx = (self.y - self.t) / batch_size  # 역전파값을 데이터 갯수로 나눈다.
 +
        return dx
 +
</syntaxhighlight>
 
== affine ==
 
== affine ==
 
딥러닝의 중간 층들에선 행렬 계산이 이루어지는데, 이런 행렬의 곱을 affine변환이라 부른다. 때문에 중간 뉴런들에 대한 층은 어파인층이라 부르고, 이들의 역전파를 통해 어파인층 학습도 가능하다.
 
딥러닝의 중간 층들에선 행렬 계산이 이루어지는데, 이런 행렬의 곱을 affine변환이라 부른다. 때문에 중간 뉴런들에 대한 층은 어파인층이라 부르고, 이들의 역전파를 통해 어파인층 학습도 가능하다.