본문 바로가기

ml_framework

cnn_weight update (cal_weight_diff)

계산한 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