본문 바로가기
머신러닝/딥러닝

딥러닝 CNN 구현 + 하이퍼파라미터 1

by ADELA_J 2023. 7. 31.

- Keras와 TensorFlow를 사용하여 CNN 구현.

1. model = Sequential()

  ▷ Keras에서는 먼저 모델을 관리하는 인스턴스 만들기.

2. model.add(Dense(128))

  ▷ add 메서드를 사용해 모델의 층을 하나씩 추가. 전결합층은 이렇게 정의. 

3. model.add(Conv2D(filters=64, kernel_size=(3,3))

  ▷ 64종의 3*3필터를 입력이미지에 적용하여 128가지를 출력한다는 뜻.

   - 합성곱층을 이렇게 추가

4. model.add(MaxPooling2D(pool_size=(2,2))

  ▷ 풀링층도 이렇게 추가 

5. model.compile(optimizer=sgd, loss='categorical_crossentropy', metrics=['accuracy'])

  ▷ 컴파일하면 신경망 모델의 생성이 종료됨.

 

* model.summary()

  ▶ 모델의 구조를 나타낸 표를 확인할 수 있음.

 

출처 :https://sonsnotation.blogspot.com/2020/11/7-convolutional-neural-networkcnn.html

 

https://dev-adela.tistory.com/186

 

▲ 한번 더 읽고 오면 밑에 코드들 더 이해 잘됨..ㅇㅇ

▶ add()메서드로 층을 추가함

 

<CNN을 이용한 분류 MNIST>

MNIST =  필기체 숫자의 데이터셋,

각 이미지의 크기는 28*28 픽셀로 흑백(1채널)의 데이터

 

▶정확도는 엉망 진창으로 나옴..ㅎ_ㅎ....

▶ summary에서 보면 dense_1+activation+1 이 은닉층 1 번 그이후에 2는 은닉층 2번 

 

<CNN을 이용한 분류 cifar10>

10종류의 개체가 있는 이미지 데이터 셋

각 이미지는 32*32 픽셀로 3채널(R, G, B)의 데이터이며 각각 0~9의 클래스 라벨이 있음.

▼ 이미지 내용 

https://www.cs.toronto.edu/~kriz/cifar.html

 

285행 opt = keras.optimizers.rmsprop(lr=0.0001,decay=1e-6)은 실행안됨.

▶opt = keras.optimizers.Adam(learning_rate=0.0001,decay=1e-6) 로 수정해서 해야함.

     ▷https://keras.io/api/optimizers/

 

 

<하이퍼파라미터 - filters(합성곱층)>

▶ filters 파라미터는 특징 맵의 수(추출할 특징의 종류)를 지정.

filters가 너무 작아서 필요한 특징을 추출하지못하면 학습을 잘 진행되지 않지만

반대로 너무 크면 과학습하기 쉬우니 주의.

 

 

<하이퍼파라미터 - kernel_size(합성곱층)>

- kernel_size 파라미터로 커널의 크기를 지정

 

 

<strides - 합성곱층>

- 특징을 추출하는 간격, 즉 커널을 이동하는 거리를 지정

- 촘촘하게 한다면 이미지 내의 동일한 위치에 같은 특징을 여러번 감지해버리는 등 불필요한 게산이 많아질 수 있음.

 > 하지만 작은 편이 좋다고 여겨져서 기본으로 (1,1)로 되어 있음.

 

<padding - 합성곱층>

- 패딩은 입력 이미지의 주변을 0으로 채우는 것을 말함. 패널 주위의 흰 테두리는 패딩을 표현한 것.

padding = valid는 패딩은 수행되지 않고 same은 출력되는 특징 맵이 입력 크기와 일치하도록 입력에 패딩을 수행함.

> 패딩에 의해 가장자리 데이터의 특징도 잘 고려하게됨.

원본 사진임다
padding이 0,0 일때는 조금 흐릿하게 원형이 그려짐.
padding이 0,0 일때보다 2,2인 이 사진이 좀 더 뚜렷하게 나옴.

▶ 패딩값을 조절하게 되면 좀 더 뚜렷하게 값이 나올 수 있다. (특징이 잘 추출될 수 있다)