본문 바로가기

implement_ml_models/CNN

implement_CNN(weight_update_mlp)

2023.03.19 - [분류 전체보기] - implement_cnn (수정3_result_delta)

 

implement_cnn (수정3_result_delta)

2023.03.18 - [분류 전체보기] - implement_cnn (수정3) implement_cnn (수정3) 2023.03.18 - [분류 전체보기] - implement_cnn (수정2) implement_cnn (수정2) 2023.03.17 - [분류 전체보기] - implement_cnn (수정1) implement_cnn (수정1)

teach-meaning.tistory.com

이전 과정을 통해 CNN 내에서의 MLP 노드들에 대한 delta 값을 계산할 수 있었다.

이 delta 값은 이전 층의 delta 값을 계산하는 것 뿐만 아니라. 

가중치 변화량에 대한 비용 함수의 변화량(노드의 출력)의 계산을 통해 가중치 업데이트 값을 구할 수 있다.

  def mlp_forward_cal(self, node_count):
    # 이전 레이어의 출력이 현재 층의 입력이 된다.
    self.mlp.node_output.append(self.layer_result[-1])

    # MLP 계산의 결과를 저장
    self.layer_result.append(self.mlp.forward_cal(self.layer_result[-1], node_count))

    self.cnn_weight.append(self.mlp.weight[-1])

node_output 의 값은 CNN 클래스의 mlp_forward_cal 함수에서 계산된다. 마지막 노드의 대한 값은 필요하지 않기 때문

 

CNN 클래스 내 cal_weight_update_mlp 함수를 통해 이를 수행

  def cal_weight_update_mlp(self, learning_rate):
    self.mlp.weight_update(learning_rate)

학습률을 입력 받고, mlp 클래스의 weight_update 함수를 수행한다.

 

mlp 클래스의 weight_update 함수

  # 가중치 업데이트량 크기 계산
  def weight_update(self, learning_rate):
    # 연산의 편리함을 위해 뒤집어준다.
    self.delta = self.delta[::-1]

    for i in range(len(self.weight)):
      self.weight_update_arr.append(self.delta[i] @ self.node_output[i].T)

      self.weight[i] = self.weight[i] - self.weight_update_arr[i]

먼저 역순으로 계산된 delta 값을 뒤집어준다.

그 다음 각 가중치 별로 업데이트 연산 수행

가중치 업데이트량의 계산으로 가중치 업데이트 가능

cnn.cal_delta_result_layer()

cnn.cal_delta_hidden_layer()
cnn.cal_delta_hidden_layer()
cnn.cal_delta_hidden_layer()

cnn.cal_weight_update_mlp(0.01)

 

'implement_ml_models > CNN' 카테고리의 다른 글

implement_cnn (수정3_result_delta)  (0) 2023.03.19
implement_cnn (수정3)  (0) 2023.03.18
implement_cnn (수정2)  (1) 2023.03.18
implement_cnn (수정1)  (0) 2023.03.17
implement_CNN(CNN_backpropagation_cnn)  (0) 2023.03.16