implement_CNN(CNN_backpropagation_cnn)

2023년 3월 15일 – (모든 범주 표시) – implement_CNN(CNN_backpropagation_pooing)

implement_CNN(CNN_backpropagation_pooing)

2023.03.14 – (모든 범주 표시) – implement_CNN(CNN_backpropagation) implement_CNN(CNN_backpropagation) 2023.03.12 – (모든 범주 표시) – implement_CNN(MLP_weight_update) implement_CNN(MLP_weight_update) 2023.03.12 – (모든 범주 표시) – 구현

티스토리-의미.tistory.com

풀링 레이어로의 역전파에 의한 델타 값이 계산되었습니다.

계산된 delta 값은 (12544, 1)의 크기를 가지며, 이는 convolution 연산 후 데이터의 변화량입니다.

컨벌루션 연산 이전에 델타 값을 구하기 위해서는 데이터 입력 값의 변화량 결과의 변화량이 이전에 구한 델타 값이 되며,

즉, 가중치에 대한 연산으로 델타를 업데이트할 수 있습니다(입력의 미분이 가중치이므로).

cnn 연산에 사용된 가중치를 이용하여 델타 값의 적절한 가중치만큼 cnn 연산을 수행합니다.

이러한 과정을 통해 각 입력 값에 대한 입력 변화에 대한 비용 함수의 변화량을 구할 수 있다.

먼저 하나씩 저장된 델타 값을 크기에 맞게 조정해야 합니다.

(12544,1)의 형태로 저장되며 크기(7,7)의 델타값 256개가 저장된다.

  # delta 값 계산을 위한 cnn 연산
  def delta_cnn(self, weight):
    # 각 필터별 연산 결과를 저장 리스트
    filter_result_arr = ()

    # 현재 델타값
    delta = self.delta(len(self.delta) - 1)

    # 필터의 개수
    filter_count = len(weight)

    # 필터의 모양양
    filter_shape = int((len(delta) / filter_count) ** (1/2))

    # 필터의 개수만큼 반복
    for i in range(filter_count):
      # 현재 필터의 델타값
      filter_delta = delta(int(i * (len(delta) /filter_count)): int((i+1) * (len(delta) /filter_count)))
      
      # 델타값의 모양을 합성곱 연산에 맞게 바꿔준다.

filter_delta = filter_delta.reshape(filter_shape, -1) # 합성곱 시 padding 을 수행했을 경우 역전파 계산에서도 padding 의 수행 filter_delta = self.pad.padding(filter_delta, int(filter_shape)) # 현재 필터의 가중치 filter_weight = weight(i) # 합성곱 연산 결과의 저장 result_arr = () # 합성곱 연산 수행 for col in range(filter_shape): for row in range(filter_shape): result = () for w_col in range(filter_weight.shape(0)): for w_row in range(filter_weight.shape(1)): result.append(filter_delta(col + w_col, row + w_row) * filter_weight(w_col, w_col)) result_arr.append(np.sum(result)) # 연산 결과를 크기에 맞게 변경 result_arr = np.array(result_arr).reshape(filter_shape, -1) filter_result_arr.append(result_arr) # 결과의 저장 self.delta.append(filter_result_arr)

1 : 현재 델타 값을 로드합니다.

마지막으로 저장된 델타 값 가져오기

2: 필터의 개수는 가중치 행렬의 개수,

3: 필터의 모양과 크기, (12544, 1)의 형태로 (256, 49)의 계산, 49 7의 제곱근은 필터의 행과 열의 크기입니다.

4: 필터 개수만큼 컨볼루션 연산 수행

5 : 현재 필터의 델타 값 저장 (0:49) , (49:98) , …

6: 매트릭스 형태의 변환

7: 이 필터의 가중치 저장

8: 컨볼루션 작업 수행 및 저장