한국의 개발자들을 위한 Google for Developers 국문 블로그입니다.
Keras 기반의 표준화: TensorFlow 2.0의 고수준 API에 대한 안내
2019년 1월 24일 목요일
<블로그 원문은
이곳
에서 확인하실 수 있으며 블로그 번역 리뷰는
신정규(Machine Learning GDE)
님이 참여해 주셨습니다>
게시자:
Sandeep Gupta
,
Josh Gordon
,
Karmel Allison
(TensorFlow 팀을 대표하여 작성함)
TensorFlow는
버전 2.0 출시
를 준비 중입니다. 이 글을 통해 TensorFlow의 고수준 API가 나아가고 있는 방향을 미리 살펴보고 몇 가지 자주 묻는 질문에 답해드리고자 합니다.
Keras
는 딥 러닝 모델의 빌드와 훈련을 위한 고수준 API로, 매우 큰 인기를 끌고 있습니다. Keras는 빠른 프로토타입 개발, 최첨단 분야 연구, 생산 분야에 사용됩니다. TensorFlow는 현재 Keras를 지원하지만, 2.0 버전에서는 Keras를 TensorFlow 플랫폼의 나머지 부분과 더욱 밀접하게 통합하게 됩니다.
Keras를 TensorFlow용 고수준 API로 확립함으로써, 머신러닝을 처음 시도하는 개발자가 TensorFlow로 더 쉽게 시작할 수 있도록 해드릴 것입니다. 고수준 API가 하나로 통합되면 혼란이 줄고 연구자를 위한 고급 기능을 제공하는 데 집중할 수 있습니다.
개발자 여러분도 우리만큼이나 Keras를 즐겨 사용하시길 바라겠습니다!
Keras는 다음과 같은 여러 가지 장점이 있습니다.
사용자 친화적:
일반적인 사용 사례에 맞춰 최적화된 Keras의 인터페이스는 간단하고 일관성이 있습니다. Keras는 사용자 오류에 대해 명쾌하면서도 실행 가능한 피드백과 종종 유용한 조언도 담겨 있고 이해하기 쉬운 오류 메시지를 제공합니다.
모듈식, 구성 가능:
Keras 모델은 거의 제한 없이 구성 가능한 기본 구성 요소를 함께 연결하는 방식으로 만들어집니다. 이 프레임워크가 제공하는 모든 것을 채택할 필요가 없거나 심지어 모르더라도 Keras에서 필요한 부분을 재사용할 수 있습니다. 예를 들어 Keras Model을 사용하지 않고 훈련을 위해 계층 또는 옵티마이저를 사용할 수 있습니다.
손쉬운 확장:
새로운 계층, 손실 함수, 최첨단의 아이디어를 전개하기 위한 [이곳에 자신의 아이디어 추가하기] 공란 등을 비롯하여, 연구를 위한 새로운 아이디어를 표현하는 맞춤 기본 구성 요소를 작성할 수 있습니다.
초보자와 전문가에게 모두 유용:
딥 러닝 개발자는 각자 배경과 경력, 경험 수준이 천차만별이지만, Keras는 초보 개발자든 오랜 경험을 보유한 전문가든 상관없이 모두에게 유용한 API를 제공합니다.
이러한 장점이 함께 어우러져 ML 학습부터 연구, 애플리케이션 개발, 배포까지 폭넓은 사용 사례에 걸쳐 이루어지는 워크플로를 더 쉽고 생산적으로 만들어 줍니다.
우선 개발자들이 가장 궁금해할 만한 몇 가지 질문에 대한 해답부터 드리겠습니다. 그 다음, TensorFlow와 함께 제공되는 Keras 버전으로 무엇을 할 수 있을지 좀 더 자세히 살펴보겠습니다.
FAQ(질문과 대답)
Keras가 별개의 라이브러리라고 생각했는데요?
무엇보다도, Keras는 API 사양입니다. Keras의 참조 구현은 독립적인 오픈소스 프로젝트로 유지되며,
www.keras.io
에서 찾아볼 수 있습니다. 이 프로젝트는 TensorFlow와는 무관하며 다양한 참가자와 사용자가 모여 활발히 활동하는 커뮤니티가 있습니다. TensorFlow는 (
tf.keras
모듈에) TensorFlow에 특정하게 향상된 기능과 함께 Keras API의 완전한 구현을 포함합니다.
Keras는 TensorFlow를 위한 단순한 래퍼인가요, 아니면 다른 라이브러리인가요?
아뇨. 흔히들 오해하는 부분인데, 왜 그렇게 오해하는지 충분히 이해할 수 있습니다. Keras는 머신러닝 모델을 정의하고 훈련하기 위한
API 표준
입니다. Keras는 특정 구현에 얽매인 것이 아닙니다. Keras API에는 TensorFlow, MXNet, TypeScript, JavaScript, CNTK, Theano, PlaidML, Scala, CoreML 및 기타 라이브러리를 위한 구현이 있습니다.
TensorFlow에 내장된 Keras의 버전과 keras.io에서 찾을 수 있는 버전은 어떤 차이점이 있나요?
TensorFlow는 (
tf.keras
모듈에) TensorFlow에 특화되어 향상된 기능과 함께 Keras API의 구현을 포함합니다. 향상된 기능으로는 직관적 디버깅과 빠른 반복을 위한
Eager 실행
지원, TensorFlow SavedModel 모델 교환 형식 지원, TPU에 관한 훈련을 비롯한 분산형 훈련을 위한 지원이 포함됩니다.
Eager 실행은 tf.keras
model subclassing
API를 사용할 때 특히 유용합니다.
Chainer
에서 영감을 얻어 만들어진 이 API를 사용하면 모델의 포워드 패스를 명령형으로 작성할 수 있습니다. tf.keras는 TensorFlow 생태계에 밀착 통합되어 있고 다음을 위한 지원 기능도 포함합니다.
tf.data
: 고성능 입력 파이프라인을 빌드할 수 있게 해줍니다. 원하는 경우 NumPy 형식의 데이터를 사용하여 모델을 훈련하거나, 규모 확장과 성능을 고려하여 tf.data를 사용할 수 있습니다.
배포 전략
: 다수의 컴퓨터에 분산되어 있는 GPU와 TPU를 포함하여, 폭넓고 다양한 컴퓨팅 구성에 걸쳐 훈련을 분산하는 전략입니다.
모델 내보내기. tf.keras API로 만든 모델을 TensorFlow
SavedModel
형식으로 직렬화할 수 있고,
TensorFlow Serving
을 사용하거나 다른 언어 바인딩(자바, Go, Rust, C# 등)을 통해 제공할 수 있습니다.
내보낸 모델은
TensorFlow Lite
로 모바일 기기와 삽입된 기기에 배포할 수 있고,
TensorFlow.js
와도 작동합니다(참고: 또한 동일하고 익숙한 Keras API를 사용하여 모델을 자바스크립트에서 직접 개발할 수도 있음).
특징 열
: 구조적 데이터를 효과적으로 표현하고 분류하기 위한 열입니다.
그 밖에도 많은 기능을 개발 중입니다.
tf.keras를 어떻게 설치하나요? 또한 pip를 통해 Keras를 설치해야 하나요?
tf.keras는 TensorFlow에 함께 포함되어 있습니다. Keras를 따로 설치할 필요는 없습니다. 예를 들어
Colab
노트북으로 작업 중이라면 다음 스크립트를 실행하세요.
그러면 tf.keras를 사용할 수 있습니다. 가져오는 방법을 잘 모르겠으면 최근에 나온
가이드
에 소개되어 있는 예제를 확인해 보세요.
TensorFlow는 초보자와 전문가 모두를 위한 다양한 API를 제공한다고 하셨는데요. 이런 API는 어떤 모습인가요?
TensorFlow 개발자는 ML을 처음으로 배우는 학생부터 ML 전문가와 연구자까지, 각자의 경험 수준이 천차만별입니다. 이와 똑같이, 다양한 워크플로와 목표를 지원하기 위해 여러 가지 API를 제공한다는 점이 TensorFlow의 강점 중 하나입니다. 마찬가지로, 사용자가 Keras의 전체 프레임워크를 채택할 필요 없이 더 이익이 되는 부분만 취사선택할 수 있도록 하는 것이 TensorFlow의 Keras 통합에 있어 기본적인 디자인 목표입니다.
Sequential API
ML을 배우는 학생이라면 tf.keras
Sequential API
로 시작하실 것을 권장합니다. 직관적이고 간결하며 사실상 ML 문제의 95% 정도에 적합한 API이기 때문입니다. 이 API를 사용하면 대략 10줄 정도의 코드만으로 생애 최초의 신경망 프로그램을 작성하실 수 있을 겁니다.
단 몇 줄의 코드로 작성한 생애 최초의 신경망을 훈련하기 위한 예제를 보려면
여기
를 클릭하세요.
모델을 정의하는 가장 일반적인 방법은 우리가 딥 러닝에 대해 생각할 때 흔히 사용하는 멘탈 모델에 해당하는 계층 그래프를 빌드하는 방법입니다. 가장 단순한 유형의 모델은 계층 쌓기입니다. 다음과 같이 Sequential API를 사용하여 그러한 모델을 정의할 수 있습니다.
'ML 학습 및 사용' 섹션 아래의
tensorflow.org/tutorials
에서 Sequential API를 사용하는 더 많은 예제를 찾으실 수 있습니다.
Sequential API를 사용하여 Fashion MNIST 데이터세트로 첫 신경망을 훈련하는 방법을 안내하는 가이드를 보려면
여기
를 클릭하세요.
Functional API
물론, 순차적 모델은 임의의 모델을 표현할 수 없는 계층으로 구성된 단순한 스택입니다. 다중 입력 및 다중 출력 모델, 공유 계층이 있는 모델, 잔류 연결이 있는 모델을 비롯한 복잡한 토폴로지를 정의할 수 있게 해주는
Functional API
를 사용하여 더욱 발전된 모델을 빌드할 수 있습니다.
Functional API로 모델을 빌드할 때 계층은 (텐서에서) 호출 가능하고 텐서를 출력으로 반환합니다. 그러면 이러한 입력 텐서와 출력 텐서를 사용하여 모델을 정의할 수 있습니다. 예를 들면 다음과 같습니다.
위와 똑같은 간단한 명령어를 사용하여 이러한 모델을 컴파일하고 훈련할 수 있습니다.
여기
에서 Functional API에 대해 자세히 알아볼 수 있습니다.
Model Subclassing API
Model Subclassing API
를 사용하여 완전 맞춤형 모델을 빌드할 수 있습니다. 클래스 메서드 본문에 자체적인 포워드 패스를 다음과 같은 스타일로 명령형으로 정의합니다.
이러한 모델은 더 유연하긴 하지만 디버그하기는 더 어려울 수 있습니다. 세 가지 유형의 모델은 전부 앞의 예제에 나오는 간단한 compile 및 fit 명령어를 사용하여 컴파일 및 훈련 가능하거나, 완전한 제어를 위해 자체적인 맞춤 훈련 루프를 작성할 수 있습니다.
Model Subclassing 스타일의 예제를 더 보려면 아래 링크를 확인하거나
tensorflow.org/tutorials
를 방문하세요('research and experimentation' 섹션 참조).
Attention을 이용한 Neural Machine Translation.
Model Subclassing API를 사용하여 구현
GAN.
Model Subclassing API를 사용하여 구현
내 연구가 이런 스타일과는 맞지 않을 때는 어떻게 하나요?
tf.keras가 자신의 응용 분야에 대해서는 제한적인 것으로 드러날 경우에 선택할 수 있는 여러 가지 옵션이 있습니다. 다음과 같은 방법을 사용할 수 있습니다.
tf.keras.layers를 Keras 모델 정의와는 따로 사용하고 자체적인 그라데이션 및 훈련 코드를 작성합니다. 마찬가지로 tf.keras.optimizers, tf.keras.initializers, tf.keras.losses 또는 tf.keras.metrics를 따로 독립적으로 사용할 수 있습니다.
tf.keras를 완전히 무시하고 하위 수준 TensorFlow, Python 및
AutoGraph
를 사용하여 원하는 결과를 얻습니다.
이는 전적으로 개발자 본인에게 달린 문제입니다! 참고로, tf.layers에 있는 비 객체지향형계층은 지원 중단될 예정이고, (tf.contrib.slim 및 tf.contrib.learn과 같은 상위 수준 API를 포함한) tf.contrib.*는 TF 2.0에서는 사용할 수 없을 것입니다.
Estimators는 어떻게 되나요?
Estimators
는 Google 내부뿐 아니라 더욱 폭넓은 TensorFlow 커뮤니티 내에서도 모두 광범위하게 사용됩니다. Linear Classifier, DNN Classifier, Combined DNN Linear Classifier(Wide and Deep Models라고도 함), Gradient Boosted Trees를 포함한 여러 가지 모델이
Premade Estimators
라는 패키지로 제공되었습니다. 이러한 모델은 바로 프로덕션 환경에서 사용 가능하고 폭넓게 배포되며, 이 모든 이유로 Premade Estimators를 포함한 Estimator API가 TensorFlow 2.0에 포함될 예정입니다.
Premade Estimators의 사용자 입장에서는 Keras와 eager 실행에 새롭게 집중하는 데 따른 영향은 최소한일 것입니다. API 외관은 똑같이 유지하면서도 Premade Estimators의 구현을 변경할 수 있습니다. 우리는 또한 Premade Estimators로 구현되는 모델의 Keras 버전을 추가하는 작업도 수행할 예정이며, 대규모 프로덕션 요구 사항을 더욱 원활히 충족시키기 위해 Keras를 확장할 것입니다.
그렇긴 하지만, 맞춤 아키텍처를 기반으로 작업 중인 분께는 Estimator 대신 tf.keras를 사용하여 모델을 빌드하실 것을 제안합니다. Estimators가 필수적인 인프라를 이용해 작업하는 분이라면 우리가 TensorFlow 생태계 전반에 걸쳐 Keras가 효과를 발휘하도록 작업하는 동안
model_to_estimator()
를 사용하여 모델을 변환할 수 있습니다.
TensorFlow 2.0을 향해!
개발자 여러분도 우리만큼이나 tf.keras를 즐겨 사용하시길 바라겠습니다! 앞으로 몇 개월 동안 TensorFlow 팀은 개발자 환경을 다듬어 마무리하는 데 집중할 예정입니다. 우리가 공개하는 문서와 가이드에 이러한 경로를 반영하겠습니다. 개발자 여러분의 생각과 피드백(
커뮤니티 리소스
확인), 그리고 GitHub 문제와 PR을 통한 재능 기부를 기다리겠습니다. 여러분, 감사합니다!
Contents
ML/Tensorflow
Android
Flutter
Web/Chrome
Cloud
Google Play
Community
Game
Firebase
검색
Tag
인디게임페스티벌
정책 세미나
창구프로그램
AdMob
AI
Android
Android 12
Android 12L
Android 13
Android 14
Android Assistant
Android Auto
Android Games
Android Jetpack
Android Machine Learning
Android Privacy
Android Studio
Android TV
Android Wear
App Bundle
bootcamp
Business
Chrome
Cloud
Community
compose
Firebase
Flutter
Foldables
Game
gdg
GDSC
google
Google Developer Student Clubs
Google Play
Google Play Games
Interview
Jetpack
Jetpack Compose
kotlin
Large Screens
Library
ma
Material Design
Material You
ML/Tensorflow
mobile games
Now in Android
PC
Play Console
Policy
priva
wa
wear
Wearables
Web
Web/Chrome
Weeklyupdates
WorkManager
Archive
2024
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2023
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2022
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2021
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2020
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2019
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2018
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2017
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2016
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2015
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2014
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2013
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2012
12월
11월
10월
9월
8월
7월
6월
5월
3월
2월
1월
2011
12월
11월
Feed