딥러닝
이번 시간에는 딥러닝에 대해 설명드리도록 하겠습니다.
이번 시간 정리
딥러닝
- 뇌의 뉴런과 유사한 머신러닝 알고리즘
- 심층 신경망(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