기타/기타 잡다한 것들

[신경망] 파이썬으로 인공 신경망 만들기 4

제주도소년 2018. 9. 28. 17:49

신경망에 질의하기


query() 함수는 신경망으로 들어오는 입력을 받아 출력을 반환해준다. 단순한 작업이지만 이를 입력 계층부터 은닉 계층을 거쳐 최종 출력 계층까지 수행해야 한다는 점을 기억해야 한다. 또한 신호는 은닉 노드와 출력 노드로 전달될 때 가중치 연산과 활성화 함수 작용을 거친다는 점을 기억해야 한다.


입력계층과 은닉 계층 사이의 가중치 행렬은 입력 행렬과 조합되어 은닉 계층으로 들어오는 신호가 되며 다음과 같이 표기 할 수 있다.


 X[각주:1] = W[각주:2] · I


파이썬에서는 numpy 라이브러리의 dot 함수를 쓰면 다음과 같이 표현할 수 있다.

hidden_inputs = numpy.dot(self.wih , inputs)


이처럼 파이썬에서는 간단한 코드로 모든 입력 값과 가중치를 연산함으로써 은닉 계층의 각 노드로 들어오는 신호를 계산한다.

이제 은닉 계층으로부터 나오는 신호를 구하려면 시그모이드 함수를 적용하면 된다.


O[각주:3] = sigmoid(X[각주:4])


파이썬에서는 시그모이드 함수가 정의가 되어있다. scipy 라는 라이브러리에는 일련의 특수 목적의 함수들이 정의되어 있는데, 그중 시그모이드 함수는

expit() 함수로 정의되어 있다.

numpy 와 scipy.special 이 import 되어있어야 한다.

위의 사진에서 빨간부분은 오타가 있어서 수정했다. pow 함수에 0.5 라고 했는데 -0.5로 바꿈


query() 함수는 매개변수로 input_list만 받는다.


신경망 객체의 생성에는 학습률이 필요한 것을 볼 수 있는데 그 이유는 신경망 클래스의 정의에 초기화 함수인 __init__() 에서 학습ㄹㄹ을 요구하기 때문에 학습률을 설정해주지 않으면 이 코드는 에러를 발생하게 된다.

그리고 [] 안에 있는것이 리스트이고, 우리의 신경망이 학습한 것이 아니기 때문에 결과값에는 의미가 없다. 그저 실행만 했을 뿐 ..

코드에 에러가 없으니 잘 동작하는것을 확인했으니 다음 포스트에서는 신경망을 학습 시킬 것임


  1. hidden [본문으로]
  2. input_hidden [본문으로]
  3. hidden [본문으로]
  4. hidden [본문으로]