AI/TensorFlow 학습

13. TensorFlow 2.x - 개선된 CNN모델에 대한 CIFAR10 예제

된다잘된다 2024. 8. 8. 10:32

참고: https://youtu.be/pKZmmO32Fpc?si=IZ3BHgUCGZroazue

 

 

이전 글에서 CNN을 이용한 CIFAR10 예제의 결과는 그렇게 좋지 않았다. 

이를 개선하기 위한 방법으로 image data augmentation을 이용해 학습 데이터를 늘리고, 

CNN 모듈에 layer를 추가해보려고 한다.

당연하게도 이는 시간과 자원이 더 필요하게 된다. 그렇지만 이렇게 함으로써 더 높은 정확도를 얻을 수 있다고 할 때, 이런 모델의 사용 유무는 선택사항이 될 것이다.

즉, 그만한 가치가 있다면 사용할 것이고, 그렇지 않다면 ...

중요한 것은 해결책이 있느냐는 것이라 생각된다.

 

위의 슬라이드는 이 예제의 순서도이다. 이를 코드로 구현해보자.

 

CIFAR 10 데이터를 가지고 와서 정규화하고 augmented image들을 만드는 코드이다.

한가지 인지할 것은 새로 만들어낸 이미지들을 섞어내기 위해서 shuffle()을 한 것이다.

 

성능 개선을 위해 새로 구성된 모델은 조금 복잡하다.

모델을 구성했으니, 손실함수, 최적화함수를 정하고 학습 시켜본다.

 

보다시피 1회 학습하는 시간이 15분이 넘게 소요된다. 모델이 복잡하기 때문이다. 이것을 250회 반복하면...

학습만 60시간 이상 걸린다는 의미이므로 여기서 중단하고 영상에 있는 결과를 이용하도록 한다.

 

영상에서는 좋은 컴퓨터와 GPU를 사용하였는지 매우 빠른 학습을 하였다.정확도는 87%까지 상승하였다. 이것을 그림으로 표현해보자.

 

 

그래프를 통해서 정확도도 많이 상승하였지만 overfitting도 거의 없음을 볼 수 있다. 

이래서 복잡한 모델을 쓰나보다.... 단, 130회 학습부터는 개선이 보이지 않는다.

 

지난번 CNN 모델과 비교해보면, 성능개선도 뚜렸하고, 과적합문제도 줄어들었다.

한가지 잠깐이나마 고민해볼 것은 이전 모델에서는 왜 30번만 학습하였을까에 대한 것이다. 

보통은 손실함수나 정확도의 합격기준을 두어서 그 지점까지만 실행하도록 만들기 때문에,

강의자는 이미 알고 30번이란 횟수를 정했을 것이다.

 

이번 글에서는 CNN의 구조를 변경하고(복잡하게), 학습데이터의 수를 늘려주면 성능개선이 된다는 것을 보여주었다.

다음 글에서는 RNN(Recurrent Neural Network)에 대해 알아보자.