일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 코딩
- flag
- 순전파
- 파이썬
- CTF
- 신경망
- 딥러닝
- PICO CTF
- 백준
- 리뷰
- Apache2
- 소프트맥스 함수
- 역전파
- AdaGrad
- Python Challenge
- PHP
- FastAPI
- HTML
- 신경망 학습
- Python
- 우분투
- 책
- 기울기
- C언어
- 설치
- sgd
- 오차역전파법
- picoCTF
- 아파치
- PostgreSQL
- Today
- Total
Story of CowHacker
딥러닝 2.4 신경망 본문
저번 글 ( 딥러닝 2.3 ) 을 이어 이번에는 2층에서 출력층으로 신호 전달을 하는 과정을 볼 것이다.
2층에서 출력층으로의 신호 전달
그림1에서 출력층에서 활성화 함수가 다르다는 것을 알 수 있다.
h()가 아닌 σ( 시그마 ) 를 표시하였다.
이제 파이썬으로 구현해본다.
import numpy as num
X = num.array ( [ 1.0, 0.5 ] )
W1 = num.array ( [ [ 0.1, 0.3, 0.5 ], [ 0.2, 0.4, 0.6 ] ] )
B1 = num.array ( [ 0.1, 0.2, 0.3 ] )
W2 = num.array ( [ [ 0.1, 0.4 ], [ 0.2, 0.5 ], [ 0.3, 0.6 ] ])
B2 = num.array ( [ 0.1, 0.2 ] )
def sigmoid ( x ):
return 1 / ( 1 + num.exp ( -x ) )
def identity_function(x):
return x
A1 = num.dot ( X, W1 ) + B1
Z1 = sigmoid ( A1 )
A2 = num.dot ( Z1, W2 ) + B2
Z2 = sigmoid ( A2 )
W3 = num.array ( [ [ 0.1, 0.3 ], [ 0.2, 0.4 ] ] )
B3 = num.array ( [ 0.1, 0.2 ] )
A3 = num.dot ( Z2, W3 ) + B3
Y = identity_function ( A3 )
print ( A3 )
print ( Y )
휴, 이로써 3층 신경망에 대해 알아보았다. 이제 지금까지의 구현을 정리해본 파이썬 코드를 짜 본다.
정리 코드
import numpy as num
def sigmoid ( x ):
return 1 / ( 1 + num.exp ( -x ) )
def identity_function(x):
return x
def init_network ():
network = {}
network [ ' W1 ' ] = num.array ( [ [ 1, 3, 5 ], [ 2, 4, 6 ] ] )
network [ ' b1 ' ] = num.array ( [ 1, 2, 3 ] )
network [ ' W2 ' ] = num.array ( [ [ 1, 4 ], [ 2, 5 ], [ 3, 6 ] ] )
network [ ' b2 ' ] = num.array ( [ 1, 2 ] )
network [ ' W3 ' ] = num.array ( [ [ 1, 3 ], [ 2, 4 ] ] )
network [ ' b3 ' ] = num.array ( [ 1, 2 ] )
return network
def forward ( network, x ):
W1, W2, W3 = network [ ' W1 ' ], network [ ' W2 ' ], network [ ' W3 ' ]
b1, b2, b3 = network [ ' b1 ' ], network [ ' b2 ' ], network [ ' b3 ' ]
a1 = num.dot ( x, W1 ) + b1
z1 = sigmoid ( a1 )
a2 = num.dot ( z1, W2 ) + b2
z2 = sigmoid ( a2 )
a3 = num.dot( z2, W3 ) + b3
y = identity_function ( a3 )
return y
network = init_network ()
x = num.array ( [ 1, 5 ] )
y = forward ( network, x )
print ( y )
코드 해석을 해보자
함수 init_network() 와 함수 forward () 두 개를 사용했다.
먼저 inin_network() 함수는 가중치와 편향을 초기화하고 이들을 딕셔너리 변수인 network에 저장한다.
그리고 이 딕셔너리 변수 network에는 각 층에 필요한 매개변수 ( 가중치와 편향 )를 저장하는 역할을 한다.
다음 forward () 함수는 입력 신호를 출력으로 변환하는 처리 과정을 모두 구현하는 역할을 한다.
이로써 신경망의 순방향 ( 역방향 신경망도 있다는 것을 알아두자 ) 구현을 알아보았다.
'공부 > 딥러닝' 카테고리의 다른 글
딥러닝 2.6 신경망 (0) | 2020.08.05 |
---|---|
딥러닝 2.5 신경망 (0) | 2020.08.04 |
딥러닝 2.3 신경망 (0) | 2020.08.03 |
딥러닝 2.2 신경망 (0) | 2020.07.26 |
딥러닝 2.1 신경망 (0) | 2020.07.26 |