Story of CowHacker

딥러닝 2.4 신경망 본문

공부/딥러닝

딥러닝 2.4 신경망

Cow_Hacker 2020. 8. 3. 21:36
728x90

저번 글 ( 딥러닝 2.3 ) 을 이어 이번에는 2층에서 출력층으로 신호 전달을 하는 과정을 볼 것이다.

 

 

 

 

2층에서 출력층으로의 신호 전달

 

 

 

 

그림1

그림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 () 함수는 입력 신호를 출력으로 변환하는 처리 과정을 모두 구현하는 역할을 한다.

 

이로써 신경망의 순방향 ( 역방향 신경망도 있다는 것을 알아두자 ) 구현을 알아보았다.

728x90

'공부 > 딥러닝' 카테고리의 다른 글

딥러닝 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
Comments