딥러닝 (Deep Learning)/딥러닝 분석연습

Keras 정의, 특징, 사용법

DS지니 2021. 4. 21. 21:21
728x90
반응형

케라스란?

 

대표적으로 텐서플로(TensorFlow)는 구글에서 공개한 오픈 소스로 전 세계적으로 가장 많이 사용한다.

lua(루아) 기반이었던 Torch(토치)는 파이썬을 기반으로 한 파이토치(PyTorch)로 바뀌었고, 많이 이용 중이다.

 

케라스(Keras)는 텐서플로 다음으로 사용자가 많다. 직관적인 흐름으로 코드를 작성할 수 있어 다른 프레임워크에 비해 추상화가 굉장히 잘 되어있다. 그리고 백엔드로 텐서플로, Theano(씨아노), CNTK, MXNet을 사용한다.

케라스는 모델을 빠르게 구현하거나 여러가지 방법으로 테스트하고 실행할 때 많이 사용하며, 운영 환경과 디테일한 모델을 구현하려 할 때 텐서플로로 재구현 하기도 한다.

 

케라스를 사용해 컴퓨터 비전부터 자연어 처리까지 이미지 분류, 시계열 예측, 감성 분석, 이미지와 텍스트 생성을 다룰 수 있다.

 

참고 : [케라스 창시자에게 배우는 딥러닝] 프랑소와 숄레 지음, 박해선 옮김

https://keras.io

 

Keras: the Python deep learning API

State-of-the-art research. Keras is used by CERN, NASA, NIH, and many more scientific organizations around the world (and yes, Keras is used at the LHC). Keras has the low-level flexibility to implement arbitrary research ideas while offering optional high

keras.io

https://github.com/rickiepark/deep-learning-with-python-notebooks

 

rickiepark/deep-learning-with-python-notebooks

<케라스 창시자에게 배우는 딥러닝> 도서의 주피터 노트북. Contribute to rickiepark/deep-learning-with-python-notebooks development by creating an account on GitHub.

github.com

 

케라스 특징

  • 동일한 코드로 CPU와 GPU에서 실행할 수 있다.
  • 사용하기 쉬운 API를 가지고 있어 딥러닝 모델의 프로토타입을 빠르게 만들 수 있다.
  • (컴퓨터 비전을 위한) 합성곱 신경망, (시퀀스 처리를 위한) 순환 신경망을 지원하며 이 둘을 자유롭게 조합해 사용할 수 있다.
  • 다중 입력이나 다중 출력 모델, 층의 공유, 모델 공유 등 어떤 네트워크 구조도 만들 수 있다. 이 말은 적대적 생성 신경망(GAN)부터 뉴럴 튜링 머신(Neural Turing Machine)까지 케라스는 기분적으로 어떤 딥러닝 모델에도 적합하다는 뜻이다.

* 뉴럴 튜링 머신 : 신경망을 이용해 튜링 머신을 구현하는 딥마인(DeepMind)의 2014년 논문을 말한다.

 

케라스는 MIT 라이선스를 따르므로 상업적인 프로젝트에서도 자유롭게 사용할 수 있고 파이썬 어떤 버전과도 호환된다.

학술적인 연구원이나 스타트업, 대기업의 기술자에서 대학원생과 아마추어 연구자까지 20만 명의 케라스를 사용한다.

구글, 넷플릭스, 우버, 썬(CERN), 옐프(Yelp), 스퀘어(Square) 그리고 다양한 분야의 스타트업 수백 개가 케라스를 사용한다. 또한 캐글에서도 인기가 높다. 

 

 

케라스 일반적인 사용법

 

케라스에서 모델을 정의하는 방법은 두 가지인데, Sequential 클래스(가장 자주 사용하는 구조인 층을 순서대로 쌓아 올린 네트워크) 또는 함수형 API(완전히 임의의 구조를 만들 수 있는 비순환 유향 그래프를 만든다)를 사용한다.

 

# Sequential 클래스 

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

from keras import models
from keras import layers

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)

함수형 API를 사용하면 모델이 처리할 데이터 텐서를 만들고 마치 함수처럼 이 텐서의 층을 적용한다.

모델 구조가 정의된 후에는 어떤 모델 방식을 사용했는지는 상관없으며, 이후 단계는 동일하다.

 

컴파일 단계에서 학습 과정이 설정된다. 여기에서 모델이 사용할 옵티마이저와 손실 함수, 훈련하는 동안 모니터링하기 위해 필요한 측정 지표를 지정한다. 

 

from keras import optimizers

model.compile(optimizer=optimizers.RMSprop(lr=0.001),
              loss='mse',
              metircs=['accuracy'])

 

마지막으로 입력 데이터의 넘파이 배열을 (그리고 이에 상응하는 타깃 데이터를) 모델의 fit() 메서드에 전달함으로써 학습 과정이 이뤄진다. 이는 사이킷런(Scikit-Learn)이나 몇몇 다른 머신러닝 라이브러리에서 하는 방식과 비슷하다.

 

model.fit(input_tensor, target_tensor, batch_size=128, epochs=10)

 

728x90
반응형