프로그래밍 언어/Python

CNN 모델- 딥러닝 모델

녁이 2023. 9. 15. 02:57
728x90
반응형

우선, 본인은 한이음 프로젝트를 통해 헬스 동작을 분석 하는 서비스 를 만들고자 딥러닝 기술을 사용하기로 했다.

처음으로 접하기 때문에, 딥러닝 모델이 어떻게 작동하는지, 어떤 신경망을 사용하는지, 어떻게 학습시키는지, 어떤 모델을 어느 상황에 써야하는지 등등 여러가지를 공부했어야 했다.

우선, CNN에 대해서 이 글에서 설명을 하고 다른 모델을 왜 사용하지 않았고 그것들만의 특징들에 대해서 적도록 하겠다.

 


CNN 모델

CNN이란?

데이터로부터 직접 학습하는 딥러닝의 신경망 아키텍처

 

CNN의 특징

  • 영상에서 객체, 클래스, 범주 인식을 위한 패턴을 찾을 때 자주 쓰인다.
  • 수십개 수백개의 계층을 가질 수 있고, 각 계층에서 영상의 서로 다른 특징을 검출한다.
  • Input Layer, Hidden Layers, Output Layer 로 구성된다.
  • 가장 일반적인 3가지 계층으로 컨볼루션 계층, 활성화 계층, 풀링 계층이 있다.

 

왜 CNN을 선택했는가?

 

→ CNN 모델은 동영상에서 객체에 대한 인식을 하는데 사용되며, 사용자에게 운동 영상을 업로드받아 딥러닝 모델의 입력값으로 넣어줘야하는 본 프로젝트에서는 RNN 모델보다 CNN 모델이 적합하다고 판단


본인의 프로젝트에서 CNN을 어떻게 정의했고 컴파일했으며, 학습시켰는지에 대해 설명하겠다.

 

CNN 모델 정의

  1. Conv2D Layer 를 추가하여 2D 합성곱을 수행하고, 32개의 필터, 3x3 커널 크기, 활성화 함수는 ReLU를 사용
  2. MaxPooling2D 레이어를 추가하여 맥스 풀링을 수행. (2x2 풀링 크기를 사용)
  3. 위 과정을 다시 반복하여 64개의 필터와 128개의 필터에 대해서도 2D 합성곱과 맥스 풀링을 수행
  4. Flatten 레이어를 추가하여 3D 텐서를 1D 벡터로 변환
  5. Dense 레이어를 추가하여 128개의 유닛과 ReLU 활성화 함수를 사용
  6. 마지막으로 Dense 레이어를 추가하여 1개의 유닛과 sigmoid 활성화 함수를 사용하여 이진 분류를 수행

이러한 과정을 통해 CNN 모델을 정의하였다.

위에서 CNN의 특징에 대해서 말했듯이 많은 계층을 가질 수 있으며 각 계층에서 다른 특징을 검출한다.

 

모델 컴파일

→ ‘adam옵티마이저를 사용하여 모델을 컴파일하고, 손실함수로 ‘binary_crossentropy를 사용

 

컴파일을 하기 위해서는 옵티마이저를 정하고, 손실함수를 결정해야 한다.

(많은 유저가 adam 옵티마이저를 많이 사용한다.)

 

모델 학습

  1. 입력 데이터 X_train 해당 데이터 레이블 y_train 데이터를 사용하여 모델을 학습
  2. epoch 횟수와 배치 크기를 알맞게 설정
  3. 학습 데이터의 20%를 검증 데이터로 사용

 

학습 현황

학습을 진행 시키면 위의 예시와 같이 epoch 횟수만큼 돌리다가 학습을 종료한다.

그리고 Loss(손실)과 정확도를 유저에게 보여준다. ( print를 통해서 확인해야 함 )

 

cnn 모델을 학습시키는 데에 사용된 코드들이다.

 

이 과정 뿐만 아니라, CNN에게 입력값을 넣어줄 영상을 processing해주는 메서드도 필요하다.

이는 개발자가 어떻게 할지에 따라 변경해서 사용하면 된다.

 

728x90
반응형