diff --git "a/week7/3\355\214\200_\354\204\234\355\230\204\353\271\210.md" "b/week7/3\355\214\200_\354\204\234\355\230\204\353\271\210.md" new file mode 100644 index 0000000..5f3d753 --- /dev/null +++ "b/week7/3\355\214\200_\354\204\234\355\230\204\353\271\210.md" @@ -0,0 +1,51 @@ +# Ch8 [이미지를 위한 인공신경망] 스터디 + +### 8-1. 합성곱 신경망의 구성 요소 +* 합성곱 : 입력데이터에서 유용한 특성만 드러나게 하는 방법 +> - 밀집층의 계산에서는, 밀집층의 뉴런 개수만큼 출력이 나온다. +> - 합성곱의 계산에서는, 입력 데이터 전체에 가중치를 적용하지 않고, 일부에 가중치를 곱한 것을 반복한다. +> - 합성곱은 2차원 입력에도 적용할 수 있는 장점이 있으며, 이 때문에 이미지 처리에서 강점을 갖는다. +> - 필터 : 합성공신경망에서 뉴런을 칭하는 용어 +> - 특성 맵 : 합성곱 계산을 통해 얻은 출력 + +* 케라스 합성곱 층 +> - keras.layers 패키지 아래 conv2d 클래스를 이용, 입력 위를 이동하는 합성곱을 사용할 수 있다. (필터의 개수/kernel_size : 사용할 커널의 크기) + +* 패딩과 스트라이드 +> - 패딩 : 입력과 출력의 크기를 동일하게 만들어주기 위해 배열 주위를 가상의 원소로 채우는 것. (세임 패딩 : 0으로 채움) +> - 밸리드 패딩 : 배열의 크기를 늘리지 않고 특성 맵을 만듬. +> - 적절한 패딩은 특성 맵에 반영되는 원소들의 비율을 균등하게 하여 이미지의 주변에 있는 정보를 잃어버리지 않도록 해준다. +> - 스트라이드 : 필터가 이동하는 크기 + +* 풀링 : 합성곱 층에서 만든 특성 맵의 가로세로 크기를 줄인다. +> - 합성곱과 비슷하게 특성 맵의 크기를 줄이지만, 가중치를 곱하는 대신 가장 큰 값을 고르거나(최대 풀링) 평균값을 계산한다.(평균 풀링) +> - 풀링은 합성곱과 달리 칸을 겹치지 않고 이동한다. + +* 합성곱 신경망의 전체 구조, 컬러 이미지를 활용한 합성곱 +> - 입력층 -> 합성곱 층 -> 풀링층 -> 밀집층 으로 이루어진다. +> - 컬러 이미지는 RGB 세 채널로 구성되어 있기 때문에, 깊이 차원이 존재한다. +> - 필터의 깊이도 입력을 따라가며, 출력은 항상 하나의 값을 가짐. +> - 케라스의 합성곱 층은 항상 3차원 입력을 기대하는데, 흑백과 같이 2차원 이미지일 경우, 혹은 풀링 이후 다시 합성곱을 실행할 때와 같은 경우 3차원 배열로 변환하여 전달한다. +> - 합성곱 신경망은 너비와 높이는 줄어들고 깊이는 깊어진다. + +### 8-2. 합성곱 신경망을 사용한 이미지 분류 +* 데이터 전처리, 합성곱 신경망 만들기 +> - 흑백 이미지를 불러와, 채널 차원을 추가해준다. +> - Sequentials 클래스의 객체를 만들고, 합성곱층인 Conv2D(세임패딩 사용)를 추가하고, 풀링층인 MaxPooling2D나, AveragePooling2D를 추가한다. 합성곱층-풀링층을 한 개 더 추가해준다. +> - 3차원 특성 맵을 일렬로 펼쳐, 드롭아웃을 적용한 밀집 은닉층을 구성, 출력층으로 전달될 수 있도록 한다. summary() 메서드로 모델 구조를 파악할 수 있다. +> - Adam 옵티마이저를 사용, ModelCheckpoint 콜백과 EarlyStopping 콜백을 사용하여 조기 종룔 기법이 구현된 컴파일을 사용한다. +> - 손실 그래프를 그려, 몇 번째 에포크가 최적인지 확인해볼 수 있다. +> - predict() 메서도로 클래스에 대한 예측 확률을 츨력하고, evaluate() 메서드를 통해 테스트 세트에 대한 성능을 측정해볼 수 있다. + +### 8-3. 합성곱 신경망의 시각화 +* 가중치 시각화 +> - model.layers()를 출력하여 어떤 층이 있는지 확인할 수 있다. +> - weights 속성으로, 층의 가중치와 절편을 확인할 수 있다. +> - 가중치의 분포를 hist()를 사용하여 히스토그램으로 그려보고, subplots() 함수를 사용해 그래프 영역을 만들어 커널을 출력해볼 수 있다. + +* 함수형 API +> - 입력과 출력이 여러 개일 경우 Sequential 클래스를 사용하기 어렵기 때문에 함수형 API를 사용한다. +> - 예를 들어, Dense 층 객체를 함수처럼 호출하여 사용할 수 있다. + +* 특성 맵 시각화 +> - 특성 맵을 시각화해보면서, 특성 맵은 시각적으로 이해하기 어려울 수 있지만, 합성곱 신경망의 앞부분에 있는 합성곱 층은 이미지의 시각적인 정보를 감지하고, 뒤쪽에 있는 합성곱 층은 이를 바탕으로 추상적인 정보를 학습한다는 것을 알 수 있다.