본문 바로가기

implement_ml_models/RNN

implement_RNN(hidden_activation)

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