Keras 인공 신경망 모델 정의 방법
- 모델을 정의하는 방법은 두 가지임
- Sequential 클래스(가장 자주 사용하는 구조인 층을 순서대로 쌓아 올린 네트워크)
- 함수형 API(완전히 임의의 구조를 만들 수 있는 비순환 유향 그래프를 만듦)를 사용함
- Sequential Class를 사용한 경우
from keras import models from keras import layers
model = models.Sequential()
model.add(layers.Dense(32, activation = 'relu', input\_shape = (784,)))
model.add(layers.Dense(10, activation = 'softmax'))
- 함수형 API를 사용한 경우
- 함수형 API를 사용하면 모델이 처리할 데이터 텐서를 만들고 마치 함수처럼 이 텐서에 층을 적용함
- 모델 구조가 정의된 후에는 Sequential 모델을 사용했는지 함수형 API를 사용했는지는 상관 없음
- 이후 단계는 동일
input_tensor = layers.Input(shape(784,)) x = layers.Dense(32, activation = 'relu')(input\_tensor) output\_tensor = layers.Dense(10, activation = 'softmax)(x)`
model = models.Model(inputs = input\_tensor, outputs = output\_tensor)
전이학습(Transfer Learning)
- 전이학습 : 이미 훈련된 모델을 고쳐쓰기
- 전이학습은 이미 학습이 완료된 모델을 다른 목적에 맞춰 조금만 고쳐서 사용하는 것
- 이미지 인식과 같이 많은 데이터를 오랜 시간 학습시켜야하는 문제의 경우 기존에 성능이 검증된 모델을 가져와 사용하여 학습시간도 단축시키고 높은 성능을 기대할 수 있다.
- 사전학습(pre_trained) 모델의 검증된 아키텍처와 가중치를 그대로 가져오고 일부 새로운 층을 추가하거나 가중치를 조정하는 방식으로 학습하는 것을 전이 학습이라고 한다.
- 이미 학습된 모델을 가져다가 특징을 추출하는 용도로 사용하고, 이 특징 추출기의 출력을 이용하여 우리가 원하는 작업을 수행하는 다음과 같은 구조로 바꿀 수 있으면 좋을 것
- 사전 학습된 모델을 가져와 일부분을 우리의 새로운 일에 활용하려면 일부 계층을 잘라서 가져오고, 이 계층들이 가지고 있는 파라미터들은 변경되지 않도록 만들어야함
- 이 계층들 이후에는 우리의 새로운 작업에 맞는 출력을 내도록 새롭게 구성해서 붙이는 것
- 붙인 부분이 학습을 통해 파라미터가 변경되는 영역으로 만들면 되며 물론 그림 오른쪽과 같이 사전 학습된 모델의 일부를 학습 가능하게 만들 수 있음
- 해결하려는 문제에서 빠른 속도로 일정 수준의 베이스라인(baseline) 성능을 얻고 싶을 때, 가장 쉽고 빠른 방법 -> 전이학습(Transfer Learning)
- 사전 학습(pre-trained)된 네트워크의 가중치를 사용하는 것
- 전이학습의 대표적인 세가지 방법
- 모델을 변형하지 않고 사용
- 모델 분류기를 재학습(가장 대표적)
- 모델 일부를 동결해제하여 재학습
사전 훈련된 Convnet 활용하기
- 작은 이미지 데이터셋에 딥러닝을 적용하는 일반적이고 매우 효과적인 방법은 사전 훈련된 네트워크를 사용하는 것임
- 사전 훈련된 네트워크(pretrained network)는 일반적으로 대규모 이미지 분류 문제를 위해 대량의 데이터 셋에서 미리 훈련되어 저장된 네트워크임
- 원본 데이터셋이 충분히 크고 일반적이라면 사전 훈련된 네트워크에 의해 학습된 특성의 계층 구조는 실제 세상에 대한 일반적인 모델로 효율적인 역할을 할 수 있음
- 새로운 문제가 원래 작업과 완전히 다른 클래스에 대한 것이더라도 이런 특성은 많은 컴퓨터 비전 문제에 유용함
- 여기에서는 (1,400만 개의 레이블된 이미지와 1,000개의 클래스로 이루어진) ImageNet 데이터셋에서 훈 련된 대규모 컨브넷을 사용해 보겠음
'머신러닝 및 딥러닝 > 딥러닝' 카테고리의 다른 글
객체탐지와 합성곱 신경망 (0) | 2023.02.27 |
---|---|
합성곱 신경망 데이터 증강(ImageDataGenerator 사용하기) (0) | 2023.02.23 |
합성곱 신경망 이론 (0) | 2023.02.22 |
딥러닝 실습(모델세부설정) (0) | 2023.02.22 |
인공신경망과 퍼셉트론 이론 (0) | 2023.02.21 |