Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[7주차 과제 제출] 3팀 서현빈 #93

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 51 additions & 0 deletions week7/3팀_서현빈.md
Original file line number Diff line number Diff line change
@@ -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 층 객체를 함수처럼 호출하여 사용할 수 있다.

* 특성 맵 시각화
> - 특성 맵을 시각화해보면서, 특성 맵은 시각적으로 이해하기 어려울 수 있지만, 합성곱 신경망의 앞부분에 있는 합성곱 층은 이미지의 시각적인 정보를 감지하고, 뒤쪽에 있는 합성곱 층은 이를 바탕으로 추상적인 정보를 학습한다는 것을 알 수 있다.