diff --git "a/week7/4\355\214\200_\354\206\241\354\242\205\353\252\205.md" "b/week7/4\355\214\200_\354\206\241\354\242\205\353\252\205.md" new file mode 100644 index 0000000..c75b868 --- /dev/null +++ "b/week7/4\355\214\200_\354\206\241\354\242\205\353\252\205.md" @@ -0,0 +1,48 @@ +# 합성곱 신경망(CNN) + +- 밀집층(Dense Layer): 모든 입력에 가중치를 곱한다. -> 뉴런, 유닛 +- 합성곱층(Convolution Layer): 3~5개의 가중치가 이동하면서 곱해진다. -> 커널, 필터 + +입력차윈과 커널의 차원이 동일해야한다. 보통 합성곱 신경망은 이미지 분류에 사용되기 때문에 입력이 2차원이다. + +커널의 크기는 하이퍼 파라미터를 통해 조절할 수 있지만 일반적으로 (3, 3) 또는 (5, 5) 크기를 사용한다. + +합성곱 계산을 통해 얻은 출력을 특성 맵(feature map)이라고 부른다. + +- 패딩: 입력 배열 주위를 0으로 채우는 것 +- 세임 패딩: 입력과 출력의 크기를 동일하게 만드는 것 +- 벨리드 패딩: 패딩 없이 입력 배열로만 특성맵을 만드는 것 +- 스트라이드: 커널이 이동하는 간격 +- 풀링: 특성맵의 크기를 줄이기 위해 평균 또는 최대값을 구하는 것 + +--- + +## 합성곱 신경망 모델 만들기 + +입력층 -> 합성곱층 -> 풀링층 -> flatten층 -> 밀집층 순으로 구성한다 + +```python +from tensorflow import keras + +model = keras.Sequential() + +model.add(keras.layers.Conv2D(32, kernel_size=3, activation='relu', padding='same', input_shape=(28, 28, 1))) +model.add(keras.layers.MaxPooling2D(2)) +model.add(keras.layers.Flatten()) +model.add(keras.layers.Dense(100, activation='relu')) +``` + +- keras.layers.Conv2D: 합성곱 신경망 층을 하나 만들어준다. + - kernel 개수를 정해준다 + - kernel_size: 커널 사이즈로 일반적으로 3 또는 5를 선택한다. + - activation: 활성화 함수의 종류를 정해준다. + - padding: 패딩의 종류를 정해준다. default값은 valid이다 + +- keras.layers.MaxPooling2D: 최대 풀링 층을 하나 만들어준다. + - kernel_size: 풀링 커널의 크기를 정해준다. + +- keras.layers.Flatten: 2차원 배열을 1차월 배열로 펴주는 층을 하나 만들어준다. + +- keras.layers.Dense: 밀집층 하나를 만들어준다. + - 뉴런의 개수를 정해준다. + - activation: 활성화 함수를 정해준다. \ No newline at end of file