제로에서 시작하는 딥 레어닝으로 MNIST 인식 신경 네트워크를 만드는 게 까다롭다면
5346 단어 pyhon30부터 Deep-Learning 만들기
제로부터 제작된 딥 레어닝1을 읽고 MNIST 손글씨를 인식하는 신경 네트워크(길어서 코드 생략)를 구축했다.
책에서 보듯이 오차 역전파법을 통해 손실 함수의 사다리를 계산해 W와 b를 업데이트한다.
GiitHub에는 소스 코드가 있지만 복제하지 않고 책을 보면서 코드를 직접 씁니다.그럼에도 불구하고 구성은 GiitHub과 기본적으로 같다.소프트 MAX, 크로스 엔트로피 함수, 명령 함수 등을 함수로 만들고 레이어와 네트워크를 클래스로 만듭니다.
(매개변수를 업데이트할 때 Adam 등을 사용하는 것은 다름)
결과↓(이쪽2의 글의 코드로 출력)
경사도 확인↓
식별 정밀도가 10%여서 신뢰할 수 없는 수준이다.경사도 없어요.예측할 수 없다.
원인을 좇아 하는 일
· 수동으로 순전파, 역전파(매트릭스 계산)를 진행하여 신경망의 결과와 대조한다
단계 8680; 수동 결과는 신경 네트워크 결과와 일치한다.신경 네트워크 관련(층의 실현 등)은 문제가 없는 것 같다.
● 신경 네트워크에 사용되는 함수 확인(소프트 맥스, 교차 엔트로피, 신호, relu)
하나하나 간단한 Aray 계산을 해도 이상한 점을 찾지 못했다.
그래서 나는 책의 GiitHub에서 이 함수들을 복제해서 배웠다.소프트 맥스↓를 교체해봤는데
이놈
어디 아파요?
↓ 용의자 코르크 맥스
softmax.py
def softmax(x):
c = np.max(x)
return np.exp(x - c) / np.sum(np.exp(x - c))
↓ 올바른 소프트 맥스(책의 GiitHub에서 복사하여 붙이기)softmax.py
def softmax(x):
if x.ndim == 2:
x = x.T
x = x - np.max(x, axis=0)
y = np.exp(x) / np.sum(np.exp(x), axis=0)
return y.T
x = x - np.max(x) # オーバーフロー対策
return np.exp(x) / np.sum(np.exp(x))
일괄 처리(샘플 수가 2보다 많을 때)에서 소프트 최대치 함수의 분모는 각 샘플의 지수 함수의 합이 아니라 모든 샘플의 지수 함수의 합이다.그게 이유야.(소프트 최대치 함수의 동작을 검증할 때 일차원aray를 넣었기 때문에 이 점을 눈치채지 못한 것은 좋지 않다)
참고 문헌
[1] 사이토 강이가 제로부터 만든 딥 레어닝
책의 GiitHub: https://github.com/oreilly-japan/deep-learning-from-scratch
[2] 0부터 Deep Learning 문외한이 걸려 넘어지는 노트 만들기: 4장
https://qiita.com/segavvy/items/bdad9fcda2f0da918e7c
Reference
이 문제에 관하여(제로에서 시작하는 딥 레어닝으로 MNIST 인식 신경 네트워크를 만드는 게 까다롭다면), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/S_Kaji/items/c7b1c9c4f29b2ba6f4b7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)