계산한 delta 값과 입력 데이터와의 연산을 통한 가중치 업데이트량 계산,
입력 데이터에 대해
입력 데이터의 각 차원별 데이터와 행렬 형태의 가중치의 행들과의 연산을 통한 연산,
입력 데이터에서 각각의 가중치 영역에 해당하는 부분을 추출하는 것,
6, 6 입력 데이터의 4, 4 가중치의 경우
입력 데이터의 해당 영역 부분의 합이 가중치 변화량에 대한 결과의 변화량일 것,
가중치 행렬의 각 행은 동일한 값을 가진다.
각 행의 가중치 변화량 계산
# 가중치 변화량 계산
# 입력 차원에 대한 반복
for input_dimension in range(input_data.shape[0]):
# input data 에 가중치 필터 영역이 지나가며 각 가중치에 해당하는 영역이 가중치 변화량이 된다.
weight_update.append(self.weight_diff_cnn(input_data[input_dimension], weight[input_dimension], stride, output_data[0].shape))
# (1,n) 크기의 numpy array 변환
weight_update = np.array(weight_update)
# 가중치 변화량 계산
def weight_diff_cnn(self, input, weight, stride, output_shape):
result = np.zeros((weight.shpae))
for input_col in range(output_shape[0]):
for input_row in range(output_shape[1]):
for weight_col in range(weight.shape[0]):
for weight_row in range(weight.shape[1]):
result[weight_col][weight_row] =\
input[input_col * stride + weight_col][input_row * stride + weight_row]
return result
'ml_framework' 카테고리의 다른 글
Cnn 정리 (cnn class) (0) | 2023.05.27 |
---|---|
cnn_weight update(2) (0) | 2023.05.25 |
cnn_cal delta (0) | 2023.05.24 |
cnn 연산의 수정 (0) | 2023.05.23 |
cnn_delta (last_layer) (0) | 2023.05.22 |