카테고리 없음

머신러닝with파이썬9(2)_딥러닝, CNN을 활용한 이미지 분류

디지털랫드 2024. 3. 27. 12:51

딥러닝


이번 시간에는 딥러닝에 대해 설명드리도록 하겠습니다.

이번 시간 정리


딥러닝

  • 뇌의 뉴런과 유사한 머신러닝 알고리즘
  • 심층 신경망(DNN, Deep Neural Network)
  • 입력층 – 은닉층 – 출력층이 있음

[딥러닝의 학습 과정]

  • 순전파: 예측값 계산
  • 손실함수: 오차 측정
  • 옵티마이저(최적화): 강사 하강법
  • 역전파: 가중치 조절

언더피팅과 오버피팅

  • train loss (영상의 파란색 곡선): 학습이 진행될수록 감소 -> train dataset에 맞게 모델이 학습되고 있음
  • validation loss (영상의 주황색 곡선): 특정 시점 이후로 증가 -> 오버피팅

에폭(Epoch)

  • 데이터 셋을 모두 학습한 상태 (루프 N회)

텐서플로(Tensorflow)

  • 2015년 구글 브레인팀에 의해 공개된 머신러닝을 위한 무료 오픈 소스 라이브러리
  • 고수준 API 지원 (keras)
  • 자동 미분

Sequential 모델

  • 레고블럭처럼 원하는 레이어만 불러들여서 쌓게 되면 하나의 딥러닝 모델을 만들 수 있다.

CNN을 활용한 이미지 분류


이번 시간에는 CNN(Convolutional Neural Network)을 활용해서 모델 성능을 올려 보도록 하겠습니다.

이번 시간 정리


CNN(합성곱 신경망 )

  • 시각적 영상을 분석하는 데 사용되는 다층의 피드-포워드적인 인공신경망의 한 종류
  • 합성곱층(Convolution layer)과 풀링층(Pooling layer)으로 구성

이미지로 순서 살펴 보기

(1) 합성곱 레이어

  • 입력 데이터와 커널(필터) 사이의 연산을 통해 데이터가 새롭게 구성된다.

(2) 풀링 레이어

  • 합성곱 레이어를 통해서 나온 feature에 맥스 풀링 연산을 적용하면 풀링 영역에서 가장 큰 값을 찾아낸다.

(3) 이미지의 특징(feature)을 추출한 피처 맵이 나온다.

(4) Flatten 레이어

  • Flatten 레이어를 통해 다차원 배열 공간을 1차원으로 펼쳐준다.

(5) Dense 레이어

  • Dense 레이어를 통해 이미지를 분류한다.

아래의 코드 실행 버튼을 눌러 실습을 진행해 보세요!

 
 
실행 완료
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/train-labels-idx1-ubyte.gz
32768/29515 [=================================] - 0s 0us/step
40960/29515 [=========================================] - 0s 0us/step
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/train-images-idx3-ubyte.gz
26427392/26421880 [==============================] - 0s 0us/step
26435584/26421880 [==============================] - 0s 0us/step
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/t10k-labels-idx1-ubyte.gz
16384/5148 [===============================================================================================] - 0s 0us/step
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/t10k-images-idx3-ubyte.gz
4423680/4422102 [==============================] - 0s 0us/step
4431872/4422102 [==============================] - 0s 0us/step
 
 
실행 완료
Model: "sequential_1"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
flatten_1 (Flatten)          (None, 784)               0         
_________________________________________________________________
dense_2 (Dense)              (None, 256)               200960    
_________________________________________________________________
dense_3 (Dense)              (None, 10)                2570      
=================================================================
Total params: 203,530
Trainable params: 203,530
Non-trainable params: 0
_________________________________________________________________
 
 
코드 실행
---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
/tmp/ipykernel_13/3379037662.py in <module>
      2 # (CPU 환경에서 10분 이상 소요될 수 있습니다. 시간이 너무 오래 걸리는 경우 epoch 수를 줄여보세요)
      3 
----> 4 history = model.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=10)

/opt/conda/lib/python3.9/site-packages/keras/engine/training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_batch_size, validation_freq, max_queue_size, workers, use_multiprocessing)
   1104     # Legacy graph support is contained in `training_v1.Model`.
   1105     version_utils.disallow_legacy_graph('Model', 'fit')
-> 1106     self._assert_compile_was_called()
   1107     self._check_call_args('fit')
   1108     _disallow_inside_tf_function('fit')

/opt/conda/lib/python3.9/site-packages/keras/engine/training.py in _assert_compile_was_called(self)
   2788     # (i.e. whether the model is built and its inputs/outputs are set).
   2789     if not self._is_compiled:
-> 2790       raise RuntimeError('You must compile your model before '
   2791                          'training/testing. '
   2792                          'Use `model.compile(optimizer, loss)`.')

RuntimeError: You must compile your model before training/testing. Use `model.compile(optimizer, loss)`.
 
 
코드 실행
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
/tmp/ipykernel_13/285050788.py in <module>
      1 # 학습 정확도
----> 2 plt.plot(history.history['accuracy'], label='acc')
      3 plt.plot(history.history['val_accuracy'], label='val')
      4 plt.xlabel('epochs')
      5 plt.ylabel('accuracy')

NameError: name 'history' is not defined
 
 
코드 실행
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
/tmp/ipykernel_13/4250584219.py in <module>
      1 # loss
----> 2 plt.plot(history.history['loss'], label='train')
      3 plt.plot(history.history['val_loss'], label='val')
      4 plt.xlabel('epochs')
      5 plt.ylabel('loss')

NameError: name 'history' is not defined