- 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://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은 출력되는 특징 맵이 입력 크기와 일치하도록 입력에 패딩을 수행함.
> 패딩에 의해 가장자리 데이터의 특징도 잘 고려하게됨.
▶ 패딩값을 조절하게 되면 좀 더 뚜렷하게 값이 나올 수 있다. (특징이 잘 추출될 수 있다)
'머신러닝 > 딥러닝' 카테고리의 다른 글
딥러닝 이미지 전처리, 표준화, 백색화, 정규화, VGG16 (0) | 2023.08.01 |
---|---|
딥러닝 하이퍼파라미터 2 - 풀링층, Pooling (0) | 2023.08.01 |
딥러닝 CNN + 개념정리 (0) | 2023.07.31 |
딥러닝 하이퍼파라미터(학습률,미니배치,반복학습) (0) | 2023.07.25 |
딥러닝 튜닝, 드롭아웃, 활성화함수, 손실함수, (0) | 2023.07.25 |