2022.12.03 - [implement_ml_models] - implement_RNN(first_step)
implement_RNN(first_step)
순환 신경망 Recurrent Neural Network 의 경우 각 시점에서 데이터가 각 은닉층을 통과한 후 각 시점에 대한 결괏값이 출력된다. 이 출력은 또한 다음 노드의 입력으로도 추가된다. 이러한 순환 신경망
teach-meaning.tistory.com
RNN의 이전 출력과 현재 입력에 대한 가중치 편향 값의 계산을 통해 은닉층의 입력에 대해 계산, 이후 은닉층에서 활성화 함수 연산과 가중치 연산을 통해 현재 출력을 생성해 낼 수 있다.
은닉층 내의 연산과 결과의 연산은 DNN 에서와 동일하다.
2022.12.01 - [implement_ml_models] - implement_activation(sigmoid)
implement_activation(sigmoid)
활성화 함수는 입력을 받아 활성화 함수 연산을 수행한 결과를 출력한다. class Activation: """ 데이터의 활성화 함수 연산 결과를 얻기 위함 추가로 역전파 계산에 필요한 활성화 함수의 미분 함수 "
teach-meaning.tistory.com
rnn_hidden_input = rnn.cal_rnn(input, output)
rnn_hidden_input
>>>
array([[14.53220519],
[23.95188809],
[29.77981887],
[29.4237416 ]])
act = Activation()
rnn_hidden_output = act.sigmoid_fun(rnn_hidden_input)
rnn_hidden_output
>>>
array([[0.999999511636426],
[0.999999999960388],
[0.999999999999883],
[0.999999999999833]], dtype=object)
은닉층 노드의 출력은 다음 순서의 입력으로 전달되고, 여기에 가중치 연산을 통해 현재 상태에 대한 출력을 얻을 수 있다.
def cal_result(self, input, output, w = []):
"""
순환 신경망의 은닉층 출력에서 최종 결과값으로의 계산
args
input : 입력 데이터
output : 원하는 출력 형태
return
행렬 곱 연산 결과
"""
# 가중치 생성
if not w:
result_w = np.random.rand(output.shape[0], output.shape[0])
self.result_w.append(result_w)
return result_w @ input
은닉층의 출력에서 목표 출력으로의 계산
rnn_result = rnn.cal_result(rnn_hidden_output, output)
rnn_result
>>>
array([[1.81022999076620],
[1.61007149366439],
[2.08639101649835],
[2.47863551710954]], dtype=object)
'implement_ml_models > RNN' 카테고리의 다른 글
implement_delta(input_w) (0) | 2022.12.05 |
---|---|
implement_rnn(result_w) (0) | 2022.12.05 |
implement_rnn(delta2) (0) | 2022.12.05 |
implement_rnn(delta) (0) | 2022.12.04 |
implement_RNN(first_step) (0) | 2022.12.03 |