떠오르는 심층 신경망 API, "케라스" 알아보기 기사(2019.2) 정리
-케라스(Keras)는 주요 고수준 신경망 API
-케라스는 파이썬(Python)으로 작성됐으며 여러 백엔드 신경망 엔진 지원
케라스와 텐서플로우 관계
케라스틑 텐서플로우를 비롯한 여러 신경망 엔진의 상위 API 개념으로 쉽게 접근 가능
텐서플로우(TensorFlow) 2.0에서도 고수준 API로 케라스 채택했음.
텐서플로우 1.12는 내장된 고수준 케라스 API인 tf.keras를 사용할 수 있다.
저수준 텐서플로우 코어 API 사용 시 이점도 있다(주로 디버깅)
케라스 원칙
케라스는 아래 각 독립 모듈을 결합해서 모델을 구성할 수 있다.
신경층(neural layer)
비용 함수(cost function)
옵티마이저(optimizer)
초기화 방식(initialization scheme)
활성화 함수(activation function)
정규화 방식(regularization scheme)
새 모듈을 새 클래스와 함수로 간단히 추가할 수 있다. 모델은 별도의 모델 구성 파일이 아닌 파이썬 코드로 정의된다.
케라스가 중요한 이유
배우기 쉽고 모델 구축이 쉽다
폭넓은 도입
광범위한 프로덕션 배포 옵션 지원
최소 5개 백엔드 엔진 통합(텐서플로우, CNTK, 테아노, MXNet, PlaidML)
여러 GPU 및 분산 학습을 지원
구글, 마이크로소프트, 아마존, 애플, 엔비디아, 우버 등이 지지
케라스 백엔드, 텐서플로우
케라스는 여러 백엔드 엔진을 지원하지만 주 백엔드이자 기본 백엔드는 텐서플로우이다.
[참고] 케라스 백엔드 변경
- $HOME/.keras/keras.json 파일을 편집해서 theano 또는 CNTK와 같은 다른 백엔드 이름을 지정
- 또는 셸이나 파이썬 코드에서 os.environ["KERAS_BACKEND"] 속성을 사용해 환경 변수 KERAS_BACKEND를 정의
케라스 모델
케라스 주요 모델 유형은 시퀀셜(Sequential) 모델, 그리고 함수 API에 사용하는 모델(Model) 클래스다.
- 케라스 시퀀셜 모델
시퀀셜 모델은 계층의 선형 스택이며 계층은 아주 단순하게 작성할 수 있다. model.add()를 사용해 시퀀셜 모델에 두 계층을 정의하는 예제는 다음과 같다.
import keras
from keras.models import Sequential
from keras.layers import Dense
# Sequential 모델 생성
model = Sequential()
#Dense implements the operation:
# output = activation(dot(input, kernel) + bias)
#Units are the dimensionality of the output space for the layer,
# which equals the number of hidden units
#Activation and loss functions may be specified by strings or classes
model.add(Dense(units=64, activation='relu', input_dim=100))
model.add(Dense(units=10, activation='softmax'))
#The compile method configures the model’s learning process
model.compile(loss='categorical_crossentropy',
optimizer='sgd',
metrics=['accuracy'])
#The fit method does the training in batches
# x_train and y_train are Numpy arrays --just like in the Scikit-Learn API.
model.fit(x_train, y_train, epochs=5, batch_size=32)
#The evaluate method calculates the losses and metrics
# for the trained model
loss_and_metrics = model.evaluate(x_test, y_test, batch_size=128)
#The predict method applies the trained model to inputs
# to generate outputs
classes = model.predict(x_test, batch_size=128)
각 단계가 한줄 코드로 가능할 정도로 단순하다.
-계층 정의
-컴파일(학습 프로세스 정의)
-피팅(학습)
-평가(손실 및 메트릭 계산)
-학습된 모델에서의 예측 출력
- 케라스 함수 API
케라스 시퀀셜 모델은 간소하지만 모델 구조에 한계가 있다. 케라스 함수 API는 다중 입력/다중 출력 모델, 방향성 비순환 그래프(DAG), 공유 계층이 있는 모델처럼 복잡한 모델 생성에 유용하다.
함수 API는 시퀀셜 모델과 같은 계층을 사용하지만 조합 측면에서 더 유연.
함수 API에서 계층을 정의한 다음에 모델을 생성하고 컴파일하고 피팅(학습)
평가와 예측은 기본적으로 시퀀셜 모델과 같음(아래 예제에서는 생략).
from keras.layers import Input, Dense
from keras.models import Model
# 텐서 생성
inputs = Input(shape=(784,))
# a layer instance is callable on a tensor, and returns a tensor
x = Dense(64, activation='relu')(inputs)
x = Dense(64, activation='relu')(x)
predictions = Dense(10, activation='softmax')(x)
# This creates a model that includes
# the Input layer and three Dense layers
model = Model(inputs=inputs, outputs=predictions)
model.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])
model.fit(data, labels) # starts training
케라스 계층
앞 예제는 Dense 계층만 사용했지만, 케라스에는 미리 정의된 계층 유형이 있으며, 자체 계층 작성도 가능하다.핵심 계층:
Dense(내적 더하기 바이어스)
Activation(함수 또는 신경 모양 전송)
Dropout(각 학습 업데이트에서 입력 단위의 일부를 무작위로 0으로 설정해서 오버피팅 방지)
Lambda(임의 표현을 Layer 객체로 래핑)
기타
컨볼루션 계층(필터를 사용해서 특징 맵 생성)은 1D에서 3D로 실행되며, 각 차원수에 대한 자르기(cropping) 및 전치 컨볼루션(transposed convolution) 계층과 같은 일반 변형을 포함한다. 사람 시각 피질 기능을 본 딴 2D 컨볼루션은 이미지 인식에 주로 사용된다.
풀링(다운스케일링) 계층:
1D에서 3D로 실행되며 최대 및 평균 풀링과 같은 일반 변형을 포함한다.
-로컬 연결 계층은 가중치를 공유하지 않는 점을 제외하면 컨볼루션 계층과 같은 방식으로 작동한다.
-반복 계층은 단순(완전 연결된 반복), 게이트, LSTM 등을 포함한다. 이는 언어 처리 등의 응용 분야에 유용하다.
-노이즈 계층은 오버피팅 방지에 유용하다.
케라스 데이터셋
케라스는 keras.datasets 클래스를 통해 7가지 딥러닝 샘플 데이터셋을 제공한다.
- cifar10 및 cifar100 소형 컬러 이미지
- IMDB 영화 리뷰
- 로이터 뉴스와이어 주요 기사
- MNIST 필기 숫자
- MNIST 패션 이미지
- 보스턴 주택 가격이 포함된다.
케라스 애플리케이션과 예제
케라스는 10가지 잘 알려진 모델도 제공한다. 이미지넷(ImageNet)으로 사전 학습된 이 모델은 케라스 애플리케이션이라고 한다.
- Xception
- VGG16
- VGG19
- ResNet50
- InceptionV3
- InceptionResNetV2
- MobileNet
- DenseNet
- NASNet
- MobileNetV2TK
이런 모델을 사용해 이미지 분류를 예측하고 특징을 추출하고 다양한 클래스 집합으로 모델을 세부 튜닝할 수 있다.
기존 모델 튜닝은 학습 속도를 높이기에 좋다. 원하는 대로 계층을 추가하고 기본 계층을 동결하고 새 계층을 학습시킨 다음 기본 계층 일부의 동결을 해제해서 학습을 세부 튜닝할 수 있다. (계층 동결 시 layer.trainable = False 를 설정)
케라스 예제 저장소에는 40개 이상의 샘플 모델이 있다.
샘플 모델은 시각 모델, 텍스트 및 시퀀스, 생성 모델 등을 다룬다.
케라스 학습
케라스 시작 문서
원문보기:
http://www.itworld.co.kr/news/116583#csidxe936029d0f6689a9e99c7b8daa2764c
'AI 머신러닝' 카테고리의 다른 글
케라스 Sequential 모델 시작하기 (0) | 2020.01.17 |
---|---|
케라스, numpy 랜덤 기능으로 임시 자료 생성하기 (0) | 2020.01.17 |
케라스 categorical_crossentropy, sparse_categorical_crossentropy (0) | 2020.01.16 |
케라스, MNIST 예제에서 숫자 샘플 이미지 출력하기 (0) | 2020.01.15 |
케라스, MNIST 손글씨 딥러닝 예제 분석 (0) | 2020.01.15 |