Tensorflow 102 - 이미지 분류(CNN)

다섯번째 딥러닝 3 - MaxPool2D

수업소개

CNN의 마지막 퍼즐 조각 Max Poolling에 대해서 이해하는 수업입니다.

MaxPool2D 레이어의 사용방법과 역할을 이해합니다. 

 

강의

실습

소스코드

colab |  backend.ai

###########################
# 라이브러리 사용
import tensorflow as tf
import pandas as pd

###########################
# 데이터를 준비하고
(독립, 종속), _ = tf.keras.datasets.mnist.load_data()
독립 = 독립.reshape(60000, 28, 28, 1)
종속 = pd.get_dummies(종속)
print(독립.shape, 종속.shape)

###########################
# 모델을 만들고
X = tf.keras.layers.Input(shape=[28, 28, 1])

H = tf.keras.layers.Conv2D(3, kernel_size=5, activation='swish')(X)
H = tf.keras.layers.MaxPool2D()(H)

H = tf.keras.layers.Conv2D(6, kernel_size=5, activation='swish')(H)
H = tf.keras.layers.MaxPool2D()(H)

H = tf.keras.layers.Flatten()(H)
H = tf.keras.layers.Dense(84, activation='swish')(H)
Y = tf.keras.layers.Dense(10, activation='softmax')(H)
model = tf.keras.models.Model(X, Y)
model.compile(loss='categorical_crossentropy', metrics='accuracy')

###########################
# 모델을 학습하고
model.fit(독립, 종속, epochs=10)

###########################
# 모델을 이용합니다. 
pred = model.predict(독립[0:5])
pd.DataFrame(pred).round(2)

# 정답 확인
종속[0:5]

# 모델 확인
model.summary()

 

댓글

댓글 본문
  1. 솔나무
    Pooling을 이용하여 Flatten의 입력값을 조정하고,
    입력값을 조정함으로써 가중치의 값을 적게 유지할 수 있다! 예아!
  2. songji
  3. Hotbrains
    완료~ 감사합니다.
  4. 이덕규
    완료
  5. 정효빈
    완료했습니다.
  6. 여어엉
    제 개인적으로는 의미적으로 '특징' 중에서 max 값을 뽑아낸다는 것 보다 중간 or 평균 값을 뽑아내는 것이 낫지 않을까 생각을 했습니다.
    하지만 overfit 현상과 overfit 방지를 위해서는 말씀처럼 maxpool이 좋은 역할이 되겠네요! 감사합니다 ^.^
    대화보기
    • Mikiss
      쏘~옥!!!
    • 이선비
      딥러닝에서는 학습하고 있는 데이터에 대한 정확도는 크게 중요하지 않습니다.
      현실에서 실제 데이터를 대상으로 정확도가 어떻게 나오는지가 더 중요해요.

      마치, 시험문제를 달달 외어서 시험점수를 높게 맞는 것이
      현실에 나와서 크게 쓸모없는 지식이 되는 것과 마찬가지 입니다.
      이런 현상을 overfit 되었다고 합니다.

      딥러닝 모델의 경우 데이터를 외우는 데에 최적화가 되어있는 녀석이어서,
      어떻게 데이터를 완전히 외우지 않고, 현실의 문제에 적응되도록 학습시키느냐가 중요한 문제가 되요.
      그래서 overfit을 방지하기 위한 기법들이 많이 있습니다.

      maxpooling도 약하게 나마 ovverfit을 방지하는 효과가 있어요.
      때문에, 정확도를 이유로 인한 어떤 선택은 굳이 하지 않으시는 게 좋고,
      'overfit 방지 + 연산량의 이득'의 효과로 인해 pooling은 사용을 하는 게 좋습니다.
      대화보기
      • nann
        완료
      • 진짜 너무 재밋다 ㅋㅋ ㅠ
      • 고고고고
        완료
      • 소야
        감사합니다.
      • hoddigi
        완료
      • 여어엉
        물론 Feature map 에서 특징이 큰 의미로 MaxPool이 좋긴 하겠지만... 정밀한 정확도까지 가데 된다면? Pooling을 안하는게 제일 좋을 것 같네요. 완료!
      • 제사마
        Done
      • John
        완료
      • 과거로의여행
        ㅎㅎㅎ, 와~우~~~ 이해가 잘 됩니다. ㅎㅎㅎ
      • VIBOT
        ok
      • 완료
      • CrashOverride
        4일차 시작
      • 이선비
        딥러닝이 그것까지 고려한 가중치 학습을 합니다. 즉, 오류의 가능성이 최소화 되는 특징을 뽑아요.
        대화보기
        • briliant6424
          21/01/10 완료
          다만 저렇게 최댓값만 뽑아서 남기면 오류의 가능성이 크지 않을까 궁금하네요.
        • 행여
          감사합니다~!♡
        • 통준
          감사합니다!
        • ukmadang
          열심히 따라가고 있습니다! 완료!
        • 유니엘
          완료.
          colab gpu 성능 좋네요.
          굳이 비교하자면 1080ti 성능과 비슷하네요.
        • 이선비
          목적 자체는 해상도를 낮추어서 메모리 사용량과 연산량을 줄이는 게 목적입니다.

          하지만, 딥러닝 모델은 기본적으로 너무 학습을 잘해서 발생하는 '오버피팅'이 문제가 되는데요.
          그래서 오버피팅을 극복하기 위한 여러가지 기법들이 개발 되어있죠.

          그런 측면에서 찾아낸 정보를 제외시키는 방식으로 동작하는 맥스풀링은
          오버피팅을 방지하는 데에 일정한 효과가 있는 것으로 알려져 있습니다.

          다만, 학습에 어떤 영향을 미치는지 자세히 연구가 된 바는 없는 것 같아요 :)
          대화보기
          • DDDDDDD
            처음 모델 학습을 시켰을 때 loss는 어느 정도 떨어졌으나 3번 이미지와 5번 이미지를 헷갈려 하네요. 이후 반복해서 학습을 시키니 서서히 정확도가 올라가는 모습을 보여줍니다.
          • 오애이오
            단순히 생각하면 해상도를 원하는 방식대로 낮춘다고 생각하면 될까요? 특징만 남겨두고 데이터를 더 깔끔하게 한다고 생각될 수도 있을 것 같은데, 연산을 줄이기 위해 어쩔 수 없이 사용하는 것인지, 아니면 오히려 이 방식이 더 정확도를 높이는 데 기여하는지 궁금합니다.
          • younghwani
            완료!
          • noahhan
            아 runtime 그거를 gpu 설정을 안했네요 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
            대화보기
            • noahhan
              왤케 느리지... 컴퓨터 문제인가 원래보다 훨씬 느려진 모델 같은데 기분 탓인가요?? ㅠㅠ