일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 오차역전파법
- Python
- 순전파
- 신경망
- CTF
- flag
- HTML
- 설치
- picoCTF
- C언어
- 기울기
- 리뷰
- PICO CTF
- 신경망 학습
- 책
- 파이썬
- PHP
- sgd
- Python Challenge
- 소프트맥스 함수
- 딥러닝
- PostgreSQL
- 코딩
- 아파치
- 역전파
- 백준
- 우분투
- AdaGrad
- Apache2
- FastAPI
Archives
- Today
- Total
Story of CowHacker
딥러닝 4.4 오차역전파법 본문
728x90
이번 글에서는 먼저 출력층에서 사용하는 소프트 맥스 함수에 대해 알아보겠다.
소프트맥스 함수는 입력값을 정규화하여 출력한다.
그림1은 간소화한 Softmax-with-Loss 계층의 계산 그래프다.
여기서 이름에 -with-Loss가 붙는 이유는 손실함수인 교차 엔트로피 오차도 포함했기 때문이다.
그림1의 계산 그래프를 해석해보면
1. 3클래스로 가정하고 3개의 입력을 받는다.
2. 입력 ( a1, a2, a3 ) 을 정규화 하여 출력 ( y1, y2, y3 ) 을 한다.
3. Cross Entropy Error 계층은 Softmax의 출력 ( y1, y2, y3 )과 정답 레이블 ( t1, t2, t3 )를 받고 이 데이터로 부터 손실 L을 출력한다.
이제 파이썬으로 구현해보겠다.
class SoftmaxWithLoss:
def __init__(self):
self.loss = None # 손실함수
self.y = None # softmax의 출력
self.t = None # 정답 레이블(원-핫 인코딩 형태)
def forward(self, x, t):
self.t = t
self.y = softmax(x)
self.loss = cross_entropy_error(self.y, self.t)
return self.loss
def backward(self, dout=1):
batch_size = self.t.shape[0]
if self.t.size == self.y.size: # 정답 레이블이 원-핫 인코딩 형태일 때
dx = (self.y - self.t) / batch_size
else:
dx = self.y.copy()
dx[np.arange(batch_size), self.t] -= 1
dx = dx / batch_size
return dx
728x90
'공부 > 딥러닝' 카테고리의 다른 글
딥러닝 5.0 학습 관련 기술들 (0) | 2020.08.19 |
---|---|
딥러닝 4.5 오차역전파법 (0) | 2020.08.19 |
딥러닝 4.3 오차역전파법 (0) | 2020.08.18 |
딥러닝 4.2 오차역전파법 (0) | 2020.08.17 |
딥러닝 4.1 오차역전파법 (0) | 2020.08.17 |
Comments