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 |