본문 바로가기

CNN 기초10

31. [CNN기초] 2차원 배열 합성곱 - image to column-2 이전 시간에는 image to coumn을 이용하여 합성곱 연산을 진행하였다. 하지만 아직도 갈 길이 많다. 이전 예제는 원리를 설명하느냐 정말 간단하게만 구현하였기 때문에 제대로 하려면 스트라이드 구현, 패딩 구현, coumn to image, 다중 채널 이미지 변환 4가지가 남아 있다. Numpy 딥러닝 시리즈에서는 1채널 (gray)로 진행한다. 다중 채널은 현재 코드 진행으로 매우 비효율적이므로 코드를 다루지 않고 개념만 마지막에 다룰 것이다. 원래 이미지는 (batch, channels, height, width) 또는 (batch, height, width, channels)로 구성되어 있는데 편의를 위해 1채널만 사용하므로 (batch, height, width)로 사용할 것이다. 또한 쉬운.. 2023. 1. 11.
30. [CNN기초] 2차원 배열 합성곱 - image to column 구현 1. 기존 합성곱 방식의 문제점 이전시간에 1차원 배열에 대한 합성곱 연산을 실시하였다. 이번 시간부터 2차원 배열(이미지)에 대해 실시해 보도록 하겠다. 원리는 간단한데, 1차원을 2차원으로 확장시켰으므로 1차원 합성곱을 2번 한다고 생각하면 쉽다. 문제는, for문 중첩이 너무 심하다는 것이다. 예를 들어 최소 아래와 같은 for문 중첩이 발생한다. for input in inputs: for fmap_h in range(fmap_height): for fmap_w in range(fmap_width): a = 0 for filter_h in range(W.shape[0]): for filter_w in range(W.shape[1]): ... ... ... 이건 못참는다(...) 나 안해! 코드 작.. 2023. 1. 6.
29. [CNN기초] 1차원 배열 CNN 훈련하기-3(패딩,선형연산) 이전 28번 구현에서 3개의 배치가 있는 경우 훈련 결과가 상당히 좋지 않았다. 노란색 부분이 1, 그 외에는 0이 되어야 하는데 완벽하지가 않다. 무엇이 문제이고 어떻게 해결할 수 있을까? 여러 가지 방법이 있으며 하나씩 살펴보기로 하자. 1. 패딩 구현하기 첫 번째 이유로 합성곱 시 입력 데이터를 균등하게 사용하지 않을 수 있기 때문이다. 아래 그림을 살펴보자. 합성곱 과정을 살펴보면 양 끝단 자료일 수록 합성곱 횟수가 감소한다. 이에 정확한 특성맵을 작성하기 힘들 수 있다. 이를 해결하기 위해 패딩(Padding)을 사용해 볼 수 있다. 패딩은 입력 데이터 주변에 특정 값으로 채우는 것을 의미한다. 우리는 모든 입력 요소가 균등하게 연산되게 하고 싶으므로 양 끝단을 각각 2개의 0의 요소로 채우는 .. 2023. 1. 5.
28. [CNN기초] 1차원 배열 CNN 훈련하기-2(배치구현) 27번 예제에서 1개의 입력에 대해 1개의 필터로 훈련하였다면 3개의 입력에 대해서 1개의 필터로 훈련한다면 어떨까? 추가로 hyper parameter를 엄밀하게 정의해 보겠다. 1. 변수 정의하기 먼저 입력과 출력을 정의해 보자. 입력 X는 (3, 5) 배열이고 목표 Y는 (3, 3) 배열이다. 입력값을 matplotlib로 이미지화 한다면 아래와 같다. 1에 가까울 수록 밝고, 0에 가까울 수록 어둡다. 가중치 W과 편향 B 설정이다. 정해진 값이 아닌 numpy 랜덤 값을 이용하여 생성해 주자. np.random.seed를 설정하여 매번 실행할 때 마다 같은 결과를 얻을 수 있도록 하자. 2. 합성곱 결과 확인하기(특성맵) 특성맵(feature map)이란, 어떤 이미지를 합성곱 한 결과로써 이미.. 2023. 1. 4.