SlideShare a Scribd company logo
1 of 49
Download to read offline
Toward tf.keras from tf.Estimator
- From Tensorflow 2.0 perspectives
▪
▪
▪
▪
▪
▪
▪
▪
▪
▪
Jaewook Kang (Jae)
About me!
❖ 이 가능할까
❖ 개인적으로 생각하는 가 외면 받았던 이유
❖
ㅈ ㅈ
Fast and Steady
ㅈ ㅈ
❖ 이상적인 모델러의 하루
ㅈ ㅈ
❖ 이상적인 모델러의 하루
– 출근하면서 논문 읽고
– 오전까지 코드 짜고
– 오후에 삽질 디버깅 하고 파라미터 맞추고
– 퇴근전에 훈련 및 평가
ㅈ ㅈ
❖ 이상적인 모델러의 하루
– 출근하면서 논문 읽고
– 오전까지 코드 짜고
– 오후에 디버깅 하고 파라미터 맞추고
– 퇴근전에 훈련 및 평가
ㅈ ㅈ
❖ 이상적인 모델러의 하루
– 출근하면서 논문 읽고
– 오전까지 코드 짜고 → 몇시간 걸림
– 오후에 디버깅 하고 파라미터 맞추고
– 퇴근전에 훈련 및 평가
누구나
ㅈ ㅈ
❖ 딥러닝 코딩 에서 해야할 것 들
– 데이터 구현
– 구현
– 루프 구현 멀티
– 모델 하는 부분을 구현
– 을 이쁘게 볼 수 있게 구현
누구나
ㅈ ㅈ
❖ 생산성 개선을 위한 방향
– 재사용성
– 가독성
누구나
ㅈ ㅈ
❖ 딥러닝 코딩 에서 해야할 것 들
– 데이터 구현 → 재사용
– 구현
– 루프 구현 멀티 → 재사용
– 모델 하는 부분을 구현 → 재사용
– 을 볼 수 있게 구현 → 재사용
누구나
ㅈ ㅈ
❖ 딥러닝 코딩 에서 해야할 것 들
– 데이터 구현
– 구현 → 우리가 주로 할일
– 루프 구현 멀티
– 모델 하는 부분을 구현
– 을 이쁘게 볼 수 있게 구현
누구나
ㅈ ㅈ
❖ 을 위해서는
– 에 집중할 수 있는 환경을 사용해야
– 어떤 프레임워크를 써야 하는가
개인적으로 생각하는
가 외면받은 이유
-
잘만들고 사용자들에게 외면받은 비운의
❖
–
❖
–
❖
–
– 반복되는 코드를 캡슐화하여 로 제공
•
• 는 자동으로 저장됨
누구나
Concept of tf.estimator is actually Good!!
❖ 딥러닝 코딩 에서 해야할 것 들
– 데이터 구현 →
– 을 위한 구현 →
– 루프 구현 → 으로 제공
– 모델 하는 부분을 구현 → 제공
– → 자동 제공
누구나
Concept of tf.estimator is actually Good!!
❖ 딥러닝 코딩 에서 해야할 것 들
– 데이터 구현 →
– 을 위한 구현 →
– 루프 구현 → 으로 제공
– 모델 하는 부분을 구현 → 제공
– → 자동 제공
→ tf.estimator는
“One day, One model”을 위한 생산성 개선에 도움이
될께
분명할텐데...
Concept of tf.estimator is actually Good!!
from model import build_model
from dataloader import Dataloader # using tf.data.Dataset
def model_fn(features, labels, mode, params):
# Define the model to construct the logits
logits = build_model(features)
loss = tf.losses.softmax_cross_entropy(onehot_labels=labels, logits=logits)
train_op = tf.train.GradientDescentOptimizer(learning_rate=lr).minimize(loss)
return tf.estimator.EstimatorSpec(mode=mode, loss=loss, train_op=train_op)
def main():
config = tf.estimator.RunConfig(#...)
train_dataset = Dataloader(data_dir = traindata_dir, is_training = is_training)
estimator = tf.estimator.Estimator(model_dir=model_dir,model_fn=model_fn,config=config)
estimator.train(input_fn=train_dataset.input_fn, max_steps=train_steps)
estimator.eval(input_fn=train_dataset.input_fn, steps=eval_steps, checkpoint_path=ckpt)
estimator.export_savedmodel(#...)
Concept of tf.estimator is actually Good!!
from model import build_model
from dataloader import Dataloader # using tf.data.Dataset
def model_fn(features, labels, mode, params):
# Define the model to construct the logits
logits = build_model(features)
loss = tf.losses.softmax_cross_entropy(onehot_labels=labels, logits=logits)
train_op = tf.train.GradientDescentOptimizer(learning_rate=lr).minimize(loss)
return tf.estimator.EstimatorSpec(mode=mode, loss=loss, train_op=train_op)
def main():
config = tf.estimator.RunConfig(#...)
train_dataset = Dataloader(data_dir = traindata_dir, is_training = is_training)
estimator = tf.estimator.Estimator(model_dir=model_dir,model_fn=model_fn,config=config)
estimator.train(input_fn=train_dataset.input_fn, max_steps=train_steps)
estimator.eval(input_fn=train_dataset.input_fn, steps=eval_steps, checkpoint_path=ckpt)
estimator.export_savedmodel(#...)
Concept of tf.estimator is actually Good!!
from model import build_model
from dataloader import Dataloader # using tf.data.Dataset
def model_fn(features, labels, mode, params):
# Define the model to construct the logits
logits = build_model(features)
loss = tf.losses.softmax_cross_entropy(onehot_labels=labels, logits=logits)
train_op = tf.train.GradientDescentOptimizer(learning_rate=lr).minimize(loss)
return tf.estimator.EstimatorSpec(mode=mode, loss=loss, train_op=train_op)
def main():
config = tf.estimator.RunConfig(#...)
train_dataset = Dataloader(data_dir = traindata_dir, is_training = is_training)
estimator = tf.estimator.Estimator(model_dir=model_dir,model_fn=model_fn,config=config)
estimator.train(input_fn=train_dataset.input_fn, max_steps=train_steps)
estimator.eval(input_fn=train_dataset.input_fn, steps=eval_steps, checkpoint_path=ckpt)
estimator.export_savedmodel(#...)
사실 Dataloader도 한번
개발해 놓으면 재활용
가능하고
build_model()에만 집중하면
됨
누구나
Concept of tf.estimator is actually Good!!
❖ 사실 컨셉은 와 같음
- 훌륭하게 잘 설계된
-
tf.Estimator.estimator tf.keras
loss / opt /
eval_metric
config
model_fn() model.compile()
train /eval estimator.train()
/estimator.eval()
model.fit()
predict estimator.predict() model.predict()
savedmodel
export
estimator.export_savedmodel() tf.contrib.saved_model.save
.keras_model()
누구나
Concept of tf.estimator is actually Good!!
❖ 사실 컨셉은 와 같음
- 에서 사용 차이
- 등의 사용해야함
- 사용
누구나
Concept of tf.estimator is actually Good!!
❖ 그럼에도 불구하고 가 잘 사용되지 않는 이유
– 너무나 빠른 변화에 지친 사용자
• 이제 방식에 익숙해진 유저에게 다시 또 새로운
스타일을 강제함
– 반드시 같이 써야하는 의 사용 난이도
• 한번 읽어 보시길 ㅠㅠ
https://www.tensorflow.org/guide/performance/datasets )
누구나
Concept of tf.estimator is actually Good!!
❖ 그럼에도 불구하고 가 잘 사용되지 않는 이유
– 코드를 굳이 로
• 코드를 굳이 새로운 인 로 짤이유 없음
• 문법이 더 익숙한데
• 기능이 추가됨에 따라서 점점 복잡
– 가독성이 떨어짐
누구나
Concept of tf.estimator is actually Good!!
❖ 요약하면…
❖ 는 아주 기술적으로 완성도 높은 였다
• 숙련된 개발자들이 사용하기에는 손색없음
❖ 하지만 다음과 같은 이유로 에서 되게 되었다
– 하지만 넓은 사용자 층에 대한 이해 부족 → 그들만의 리그
– 다른 프레임워크의 상황인식이 부족
삽질 해보는
변해야 변한다
❖ Tensorflow 2.0에서는 keras가 대표 api라는데...
❖ 로 구현된 내 프로젝트를 어떻게 최소한의
노력으로 로 옮길 수 있을까
– → 는 구글이 로 제공함
• https://www.tensorflow.org/api_docs/python/tf/keras/estima
tor/model_to_estimator
– How about estimator → keras?
내가 을 사용하는 구조
을 빼면
❖ 에서 에 대한 몇 가지 사실
– 왜 매우 를 가지고 있다
– 으로 이 가능하다
– 로 하는 를 제공한다
– 는 이외의 로 만들수 있을까
❖ 에서 에 대한 몇 가지 사실
– 왜 매우 를 가지고 있다
– 으로 이 가능하다
– 로 하는 를 제공한다
– 는 이외의 로 만들수 있을까
내가 을 사용하는 구조
을 빼면
로 다음과 같은 구조로
가능할까
로 다음과 같은 구조로
가능할까
build_model() 입출력을
- get_keras_model()에서
tf.keras.models.Model로
packaging
Packaging MyModel as a tf.keras.models.Model
class MyModel(object):
def __init__(self, args):
# Keras model에서 사용할 파라미터를 정의하는 부분
def build_model(self, inputs):
# model을 정의하는 부분
def build_model(self, inputs):
# tf.keras.models.Model로 packaging 하는 부분
Packaging MyModel as a tf.keras.models.Model
class MyModel(object):
def __init__(self, args):
self.model = None
def build_model(self, inputs):
net = tf.keras.layers.Embedding()(inputs)
…
return outputs = tf.keras.layers.Dense()(net)
def get_keras_model (self):
input = tf.keras.layers.Input(shape=...)
output = self.get_keras_model(input)
self.model = tf.keras.models.Model(inputs=input,outputs=output)
return self.model
해야 할일을 정리하면
❖ 안되있는 경우 파트를 독립적으로 분리한다
❖ 안되있는 경우 를 분리한다
❖ 으로 모델 인스턴스 생성
–
–
❖ 와 으로 훈련한다
주의 사항
❖ 몇가지
– 로 구현한 코드와는 호환되지 않음
•
• 호환
– 대부분의 와는 호환할듯 전부 미확인
• 의 대부분과 호환
• 도 호환될듯 미확인
– 아직 이 동일 하게 생성됐는지 미확인
주의 사항
❖ 몇가지
– 로 구현한 코드와는 호환되지 않음
•
• 호환
– 대부분의 와는 호환할듯 전부 미확인
• 의 대부분과 호환
• 도 호환될듯 미확인
– 아직 이 동일 하게 생성됐는지 미확인
그럼 로 구현한 모델은 어떻하나요
❖ 일단 로는 변환이 어려움
– → 의
프로토콜은 적용 불가능
그럼 로 구현한 모델은 어떻하나요
❖ 에서 다른 훈련 방법도 제공
– 로 가능
– 변화 때문에 날 수도 있음
@ tf.function
def train(model,dataset,optimizer):
for x, y in dataset:
with tf.GradientTape() as tape:
prediction = model(x)
loss = loss_fn(prediction,y)
grads = tape.gradient(target=tr_loss, sources=dnn.variables)
opt.apply_gradients(grads, model.variables)
정리하면
❖ 로 구현된 모델
→ 로 변환 기존 프로젝트 구조 사용 가능
❖ 로 구현된 모델
– 로 변환 불가능
– 방식으로 진행
• 하지만 이경우도 의 변동 때문에 코드 수정 불가피
❖ 가장 좋은 것은 에서 로 저장해 놓고
불러오는것
– 이경우 코드 재사용 불가ㅠㅠ
누구나
마치며
• 일부 엔지니어 개발자들만 잘 쓸 수 있는 오픈소스는 완성도에
상관없이 대중화 되기 힘들다
• 오픈소스를 대중화를 위해서는 지속적인 설명과 이해를 구하면서
사용자와 신뢰 쌓아가는 시간이 필요하다
• 이것은 대중화가 된 대부분의 오픈소스들이 겪어온 과정이다
• 의 교훈에서 는 이부분을 되돌아봐야 하지
않을까
Accelerate your AI coding
with TF 2.0!
Thank you for your attention

More Related Content

What's hot

[0410 박민근] 기술 면접시 자주 나오는 문제들
[0410 박민근] 기술 면접시 자주 나오는 문제들[0410 박민근] 기술 면접시 자주 나오는 문제들
[0410 박민근] 기술 면접시 자주 나오는 문제들
MinGeun Park
 
[0820 석재호]headfirst디자인패턴
[0820 석재호]headfirst디자인패턴[0820 석재호]headfirst디자인패턴
[0820 석재호]headfirst디자인패턴
Jaeho Seok
 
Effective c++ 2
Effective c++ 2Effective c++ 2
Effective c++ 2
현찬 양
 
Effective c++ 4
Effective c++ 4Effective c++ 4
Effective c++ 4
현찬 양
 
Effective c++ 1
Effective c++ 1Effective c++ 1
Effective c++ 1
현찬 양
 

What's hot (15)

More effective c++ chapter4 이후 항목 29까지
More effective c++ chapter4 이후 항목 29까지More effective c++ chapter4 이후 항목 29까지
More effective c++ chapter4 이후 항목 29까지
 
[0410 박민근] 기술 면접시 자주 나오는 문제들
[0410 박민근] 기술 면접시 자주 나오는 문제들[0410 박민근] 기술 면접시 자주 나오는 문제들
[0410 박민근] 기술 면접시 자주 나오는 문제들
 
[0820 석재호]headfirst디자인패턴
[0820 석재호]headfirst디자인패턴[0820 석재호]headfirst디자인패턴
[0820 석재호]headfirst디자인패턴
 
Framer js a/s talk
Framer js a/s talkFramer js a/s talk
Framer js a/s talk
 
읽기 좋은 코드가 좋은코드다
읽기 좋은 코드가 좋은코드다읽기 좋은 코드가 좋은코드다
읽기 좋은 코드가 좋은코드다
 
Effective c++ chapter3, 4 요약본
Effective c++ chapter3, 4 요약본Effective c++ chapter3, 4 요약본
Effective c++ chapter3, 4 요약본
 
Effective c++ 2
Effective c++ 2Effective c++ 2
Effective c++ 2
 
Effective c++ 4
Effective c++ 4Effective c++ 4
Effective c++ 4
 
1장 디자인 패턴 소개
1장 디자인 패턴 소개1장 디자인 패턴 소개
1장 디자인 패턴 소개
 
Open jig-ware 6회-오로카세미나pptx
Open jig-ware 6회-오로카세미나pptxOpen jig-ware 6회-오로카세미나pptx
Open jig-ware 6회-오로카세미나pptx
 
[부스트캠프 Tech Talk] 김제우_짝코딩(Pair Programming)
[부스트캠프 Tech Talk] 김제우_짝코딩(Pair Programming)[부스트캠프 Tech Talk] 김제우_짝코딩(Pair Programming)
[부스트캠프 Tech Talk] 김제우_짝코딩(Pair Programming)
 
오픈지그웨어<대성고 2학년 김선빈>
오픈지그웨어<대성고 2학년 김선빈>오픈지그웨어<대성고 2학년 김선빈>
오픈지그웨어<대성고 2학년 김선빈>
 
Effective c++ 1
Effective c++ 1Effective c++ 1
Effective c++ 1
 
OSS개발자포럼(2017.01) 파이썬 소개자료
OSS개발자포럼(2017.01) 파이썬 소개자료 OSS개발자포럼(2017.01) 파이썬 소개자료
OSS개발자포럼(2017.01) 파이썬 소개자료
 
간단하게 알아보는 좋은 코드 서영훈
간단하게 알아보는 좋은 코드   서영훈간단하게 알아보는 좋은 코드   서영훈
간단하게 알아보는 좋은 코드 서영훈
 

Similar to JMI Techtalk: 강재욱 - Toward tf.keras from tf.estimator - From TensorFlow 2.0 perspectives

20년된 Naver Cafe 서비스가 Modularization으로 진화 하기_정동진.pdf
20년된 Naver Cafe 서비스가 Modularization으로 진화 하기_정동진.pdf20년된 Naver Cafe 서비스가 Modularization으로 진화 하기_정동진.pdf
20년된 Naver Cafe 서비스가 Modularization으로 진화 하기_정동진.pdf
eastarJeong2
 
애자일 도입과 사례 공유
애자일 도입과 사례 공유애자일 도입과 사례 공유
애자일 도입과 사례 공유
agilekorea
 
이펙티브 C++ (7~9)
이펙티브 C++ (7~9)이펙티브 C++ (7~9)
이펙티브 C++ (7~9)
익성 조
 
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
devCAT Studio, NEXON
 
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
devCAT Studio, NEXON
 

Similar to JMI Techtalk: 강재욱 - Toward tf.keras from tf.estimator - From TensorFlow 2.0 perspectives (20)

딥러닝 세계에 입문하기 위반 분투
딥러닝 세계에 입문하기 위반 분투딥러닝 세계에 입문하기 위반 분투
딥러닝 세계에 입문하기 위반 분투
 
FP, lazy evaluation
FP, lazy evaluation FP, lazy evaluation
FP, lazy evaluation
 
랩탑으로 tensorflow 도전하기 - tutorial
랩탑으로 tensorflow 도전하기 - tutorial랩탑으로 tensorflow 도전하기 - tutorial
랩탑으로 tensorflow 도전하기 - tutorial
 
Effective c++ chapter7_8_9_dcshin
Effective c++ chapter7_8_9_dcshinEffective c++ chapter7_8_9_dcshin
Effective c++ chapter7_8_9_dcshin
 
dbt 101
dbt 101dbt 101
dbt 101
 
20년된 Naver Cafe 서비스가 Modularization으로 진화 하기_정동진.pdf
20년된 Naver Cafe 서비스가 Modularization으로 진화 하기_정동진.pdf20년된 Naver Cafe 서비스가 Modularization으로 진화 하기_정동진.pdf
20년된 Naver Cafe 서비스가 Modularization으로 진화 하기_정동진.pdf
 
[Osxdev]4.swift
[Osxdev]4.swift[Osxdev]4.swift
[Osxdev]4.swift
 
Template at c++
Template at c++Template at c++
Template at c++
 
애자일의 모든것
애자일의 모든것애자일의 모든것
애자일의 모든것
 
애자일 도입과 사례 공유
애자일 도입과 사례 공유애자일 도입과 사례 공유
애자일 도입과 사례 공유
 
Ml for 정형데이터
Ml for 정형데이터Ml for 정형데이터
Ml for 정형데이터
 
프로젝트 관리 및 지켜야 할 사항들
프로젝트 관리 및 지켜야 할 사항들프로젝트 관리 및 지켜야 할 사항들
프로젝트 관리 및 지켜야 할 사항들
 
이펙티브 C++ (7~9)
이펙티브 C++ (7~9)이펙티브 C++ (7~9)
이펙티브 C++ (7~9)
 
GNMT로 알아보는 신경망 기반 기계번역
GNMT로 알아보는 신경망 기반 기계번역GNMT로 알아보는 신경망 기반 기계번역
GNMT로 알아보는 신경망 기반 기계번역
 
Transfer learning usage
Transfer learning usageTransfer learning usage
Transfer learning usage
 
5 6 1
5 6 15 6 1
5 6 1
 
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
홍성우, 게임 프로그래머는 어떻게 가르치나요?, NDC2018
 
검색엔진에 적용된 ChatGPT
검색엔진에 적용된 ChatGPT검색엔진에 적용된 ChatGPT
검색엔진에 적용된 ChatGPT
 
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
 
Openface
OpenfaceOpenface
Openface
 

More from Lablup Inc.

More from Lablup Inc. (19)

Lablupconf session1-2 "거대한 백엔드에 벽돌 끼워넣기"
Lablupconf session1-2 "거대한 백엔드에 벽돌 끼워넣기"Lablupconf session1-2 "거대한 백엔드에 벽돌 끼워넣기"
Lablupconf session1-2 "거대한 백엔드에 벽돌 끼워넣기"
 
Lablupconf session8 "Paving the road to AI-powered world"
Lablupconf session8 "Paving the road to AI-powered world"Lablupconf session8 "Paving the road to AI-powered world"
Lablupconf session8 "Paving the road to AI-powered world"
 
Lablupconf session7 People don't know what they want until LABLUP show it to ...
Lablupconf session7 People don't know what they want until LABLUP show it to ...Lablupconf session7 People don't know what they want until LABLUP show it to ...
Lablupconf session7 People don't know what they want until LABLUP show it to ...
 
Lablupconf session6 "IoT에서 BI까지, 조선소 ML 파이프라인 만들기"
Lablupconf session6 "IoT에서 BI까지, 조선소 ML 파이프라인 만들기"Lablupconf session6 "IoT에서 BI까지, 조선소 ML 파이프라인 만들기"
Lablupconf session6 "IoT에서 BI까지, 조선소 ML 파이프라인 만들기"
 
Lablupconf session3 "Application of DL in fight against COVID-19(EN)"
Lablupconf session3 "Application of DL in fight against COVID-19(EN)"Lablupconf session3 "Application of DL in fight against COVID-19(EN)"
Lablupconf session3 "Application of DL in fight against COVID-19(EN)"
 
Lablupconf session5 "Application of machine learning to classify normal and d...
Lablupconf session5 "Application of machine learning to classify normal and d...Lablupconf session5 "Application of machine learning to classify normal and d...
Lablupconf session5 "Application of machine learning to classify normal and d...
 
Lablupconf session4 "스토리지 솔루션 입출력 파이프라인 가속화와 개발 범위 간의 균형 잡기"
Lablupconf session4 "스토리지 솔루션 입출력 파이프라인 가속화와 개발 범위 간의 균형 잡기"Lablupconf session4 "스토리지 솔루션 입출력 파이프라인 가속화와 개발 범위 간의 균형 잡기"
Lablupconf session4 "스토리지 솔루션 입출력 파이프라인 가속화와 개발 범위 간의 균형 잡기"
 
Lablupconf session2 "MLOps를 활용한 AI빅데이터 교육 사례"
Lablupconf session2 "MLOps를 활용한 AI빅데이터 교육 사례"Lablupconf session2 "MLOps를 활용한 AI빅데이터 교육 사례"
Lablupconf session2 "MLOps를 활용한 AI빅데이터 교육 사례"
 
Lablupconf session1-1 "Lablup과 함께하는 컨트리뷰션 아카데미" - 김수진
Lablupconf session1-1 "Lablup과 함께하는 컨트리뷰션 아카데미" - 김수진Lablupconf session1-1 "Lablup과 함께하는 컨트리뷰션 아카데미" - 김수진
Lablupconf session1-1 "Lablup과 함께하는 컨트리뷰션 아카데미" - 김수진
 
Lablupconf keynote
Lablupconf keynoteLablupconf keynote
Lablupconf keynote
 
초심자를 위한 무작정 시작하는 Backend.AI-04
초심자를 위한 무작정 시작하는 Backend.AI-04초심자를 위한 무작정 시작하는 Backend.AI-04
초심자를 위한 무작정 시작하는 Backend.AI-04
 
초심자를 위한 무작정 시작하는 Backend.AI-03
초심자를 위한 무작정 시작하는 Backend.AI-03초심자를 위한 무작정 시작하는 Backend.AI-03
초심자를 위한 무작정 시작하는 Backend.AI-03
 
Backend.ai tutorial-2ndweek
Backend.ai tutorial-2ndweekBackend.ai tutorial-2ndweek
Backend.ai tutorial-2ndweek
 
Backend.ai tutorial-01
Backend.ai tutorial-01Backend.ai tutorial-01
Backend.ai tutorial-01
 
Backend.AI: Brochure (2019 Autumn / 19.09)
Backend.AI: Brochure (2019 Autumn / 19.09)Backend.AI: Brochure (2019 Autumn / 19.09)
Backend.AI: Brochure (2019 Autumn / 19.09)
 
Backend.AI Technical Introduction (19.09 / 2019 Autumn)
Backend.AI Technical Introduction (19.09 / 2019 Autumn)Backend.AI Technical Introduction (19.09 / 2019 Autumn)
Backend.AI Technical Introduction (19.09 / 2019 Autumn)
 
JMI Techtalk: 한재근 - How to use GPU for developing AI
JMI Techtalk: 한재근 - How to use GPU for developing AIJMI Techtalk: 한재근 - How to use GPU for developing AI
JMI Techtalk: 한재근 - How to use GPU for developing AI
 
JMI Techtalk : Backend.AI
JMI Techtalk : Backend.AIJMI Techtalk : Backend.AI
JMI Techtalk : Backend.AI
 
Backend.AI: 왜 우리는 우리 핵심 제품을 오픈소스화 했는가
Backend.AI: 왜 우리는 우리 핵심 제품을 오픈소스화 했는가Backend.AI: 왜 우리는 우리 핵심 제품을 오픈소스화 했는가
Backend.AI: 왜 우리는 우리 핵심 제품을 오픈소스화 했는가
 

Recently uploaded

Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)
Wonjun Hwang
 
파일 업로드(Kitworks Team Study 유현주 발표자료 240510)
파일 업로드(Kitworks Team Study 유현주 발표자료 240510)파일 업로드(Kitworks Team Study 유현주 발표자료 240510)
파일 업로드(Kitworks Team Study 유현주 발표자료 240510)
Wonjun Hwang
 

Recently uploaded (6)

도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
 
Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)
 
오픈소스 위험 관리 및 공급망 보안 솔루션 'Checkmarx SCA' 소개자료
오픈소스 위험 관리 및 공급망 보안 솔루션 'Checkmarx SCA' 소개자료오픈소스 위험 관리 및 공급망 보안 솔루션 'Checkmarx SCA' 소개자료
오픈소스 위험 관리 및 공급망 보안 솔루션 'Checkmarx SCA' 소개자료
 
[OpenLAB] AWS reInvent를 통해 바라본 글로벌 Cloud 기술동향.pdf
[OpenLAB] AWS reInvent를 통해 바라본 글로벌 Cloud 기술동향.pdf[OpenLAB] AWS reInvent를 통해 바라본 글로벌 Cloud 기술동향.pdf
[OpenLAB] AWS reInvent를 통해 바라본 글로벌 Cloud 기술동향.pdf
 
클라우드 애플리케이션 보안 플랫폼 'Checkmarx One' 소개자료
클라우드 애플리케이션 보안 플랫폼 'Checkmarx One' 소개자료클라우드 애플리케이션 보안 플랫폼 'Checkmarx One' 소개자료
클라우드 애플리케이션 보안 플랫폼 'Checkmarx One' 소개자료
 
파일 업로드(Kitworks Team Study 유현주 발표자료 240510)
파일 업로드(Kitworks Team Study 유현주 발표자료 240510)파일 업로드(Kitworks Team Study 유현주 발표자료 240510)
파일 업로드(Kitworks Team Study 유현주 발표자료 240510)
 

JMI Techtalk: 강재욱 - Toward tf.keras from tf.estimator - From TensorFlow 2.0 perspectives

  • 1. Toward tf.keras from tf.Estimator - From Tensorflow 2.0 perspectives
  • 2.
  • 4. ❖ 이 가능할까 ❖ 개인적으로 생각하는 가 외면 받았던 이유 ❖
  • 6. ㅈ ㅈ ❖ 이상적인 모델러의 하루
  • 7. ㅈ ㅈ ❖ 이상적인 모델러의 하루 – 출근하면서 논문 읽고 – 오전까지 코드 짜고 – 오후에 삽질 디버깅 하고 파라미터 맞추고 – 퇴근전에 훈련 및 평가
  • 8. ㅈ ㅈ ❖ 이상적인 모델러의 하루 – 출근하면서 논문 읽고 – 오전까지 코드 짜고 – 오후에 디버깅 하고 파라미터 맞추고 – 퇴근전에 훈련 및 평가
  • 9. ㅈ ㅈ ❖ 이상적인 모델러의 하루 – 출근하면서 논문 읽고 – 오전까지 코드 짜고 → 몇시간 걸림 – 오후에 디버깅 하고 파라미터 맞추고 – 퇴근전에 훈련 및 평가
  • 10. 누구나 ㅈ ㅈ ❖ 딥러닝 코딩 에서 해야할 것 들 – 데이터 구현 – 구현 – 루프 구현 멀티 – 모델 하는 부분을 구현 – 을 이쁘게 볼 수 있게 구현
  • 11. 누구나 ㅈ ㅈ ❖ 생산성 개선을 위한 방향 – 재사용성 – 가독성
  • 12. 누구나 ㅈ ㅈ ❖ 딥러닝 코딩 에서 해야할 것 들 – 데이터 구현 → 재사용 – 구현 – 루프 구현 멀티 → 재사용 – 모델 하는 부분을 구현 → 재사용 – 을 볼 수 있게 구현 → 재사용
  • 13. 누구나 ㅈ ㅈ ❖ 딥러닝 코딩 에서 해야할 것 들 – 데이터 구현 – 구현 → 우리가 주로 할일 – 루프 구현 멀티 – 모델 하는 부분을 구현 – 을 이쁘게 볼 수 있게 구현
  • 14. 누구나 ㅈ ㅈ ❖ 을 위해서는 – 에 집중할 수 있는 환경을 사용해야 – 어떤 프레임워크를 써야 하는가
  • 15. 개인적으로 생각하는 가 외면받은 이유 - 잘만들고 사용자들에게 외면받은 비운의
  • 18. ❖ – – 반복되는 코드를 캡슐화하여 로 제공 • • 는 자동으로 저장됨
  • 19. 누구나 Concept of tf.estimator is actually Good!! ❖ 딥러닝 코딩 에서 해야할 것 들 – 데이터 구현 → – 을 위한 구현 → – 루프 구현 → 으로 제공 – 모델 하는 부분을 구현 → 제공 – → 자동 제공
  • 20. 누구나 Concept of tf.estimator is actually Good!! ❖ 딥러닝 코딩 에서 해야할 것 들 – 데이터 구현 → – 을 위한 구현 → – 루프 구현 → 으로 제공 – 모델 하는 부분을 구현 → 제공 – → 자동 제공 → tf.estimator는 “One day, One model”을 위한 생산성 개선에 도움이 될께 분명할텐데...
  • 21. Concept of tf.estimator is actually Good!! from model import build_model from dataloader import Dataloader # using tf.data.Dataset def model_fn(features, labels, mode, params): # Define the model to construct the logits logits = build_model(features) loss = tf.losses.softmax_cross_entropy(onehot_labels=labels, logits=logits) train_op = tf.train.GradientDescentOptimizer(learning_rate=lr).minimize(loss) return tf.estimator.EstimatorSpec(mode=mode, loss=loss, train_op=train_op) def main(): config = tf.estimator.RunConfig(#...) train_dataset = Dataloader(data_dir = traindata_dir, is_training = is_training) estimator = tf.estimator.Estimator(model_dir=model_dir,model_fn=model_fn,config=config) estimator.train(input_fn=train_dataset.input_fn, max_steps=train_steps) estimator.eval(input_fn=train_dataset.input_fn, steps=eval_steps, checkpoint_path=ckpt) estimator.export_savedmodel(#...)
  • 22. Concept of tf.estimator is actually Good!! from model import build_model from dataloader import Dataloader # using tf.data.Dataset def model_fn(features, labels, mode, params): # Define the model to construct the logits logits = build_model(features) loss = tf.losses.softmax_cross_entropy(onehot_labels=labels, logits=logits) train_op = tf.train.GradientDescentOptimizer(learning_rate=lr).minimize(loss) return tf.estimator.EstimatorSpec(mode=mode, loss=loss, train_op=train_op) def main(): config = tf.estimator.RunConfig(#...) train_dataset = Dataloader(data_dir = traindata_dir, is_training = is_training) estimator = tf.estimator.Estimator(model_dir=model_dir,model_fn=model_fn,config=config) estimator.train(input_fn=train_dataset.input_fn, max_steps=train_steps) estimator.eval(input_fn=train_dataset.input_fn, steps=eval_steps, checkpoint_path=ckpt) estimator.export_savedmodel(#...)
  • 23. Concept of tf.estimator is actually Good!! from model import build_model from dataloader import Dataloader # using tf.data.Dataset def model_fn(features, labels, mode, params): # Define the model to construct the logits logits = build_model(features) loss = tf.losses.softmax_cross_entropy(onehot_labels=labels, logits=logits) train_op = tf.train.GradientDescentOptimizer(learning_rate=lr).minimize(loss) return tf.estimator.EstimatorSpec(mode=mode, loss=loss, train_op=train_op) def main(): config = tf.estimator.RunConfig(#...) train_dataset = Dataloader(data_dir = traindata_dir, is_training = is_training) estimator = tf.estimator.Estimator(model_dir=model_dir,model_fn=model_fn,config=config) estimator.train(input_fn=train_dataset.input_fn, max_steps=train_steps) estimator.eval(input_fn=train_dataset.input_fn, steps=eval_steps, checkpoint_path=ckpt) estimator.export_savedmodel(#...) 사실 Dataloader도 한번 개발해 놓으면 재활용 가능하고 build_model()에만 집중하면 됨
  • 24. 누구나 Concept of tf.estimator is actually Good!! ❖ 사실 컨셉은 와 같음 - 훌륭하게 잘 설계된 - tf.Estimator.estimator tf.keras loss / opt / eval_metric config model_fn() model.compile() train /eval estimator.train() /estimator.eval() model.fit() predict estimator.predict() model.predict() savedmodel export estimator.export_savedmodel() tf.contrib.saved_model.save .keras_model()
  • 25. 누구나 Concept of tf.estimator is actually Good!! ❖ 사실 컨셉은 와 같음 - 에서 사용 차이 - 등의 사용해야함 - 사용
  • 26. 누구나 Concept of tf.estimator is actually Good!! ❖ 그럼에도 불구하고 가 잘 사용되지 않는 이유 – 너무나 빠른 변화에 지친 사용자 • 이제 방식에 익숙해진 유저에게 다시 또 새로운 스타일을 강제함 – 반드시 같이 써야하는 의 사용 난이도 • 한번 읽어 보시길 ㅠㅠ https://www.tensorflow.org/guide/performance/datasets )
  • 27. 누구나 Concept of tf.estimator is actually Good!! ❖ 그럼에도 불구하고 가 잘 사용되지 않는 이유 – 코드를 굳이 로 • 코드를 굳이 새로운 인 로 짤이유 없음 • 문법이 더 익숙한데 • 기능이 추가됨에 따라서 점점 복잡 – 가독성이 떨어짐
  • 28. 누구나 Concept of tf.estimator is actually Good!! ❖ 요약하면… ❖ 는 아주 기술적으로 완성도 높은 였다 • 숙련된 개발자들이 사용하기에는 손색없음 ❖ 하지만 다음과 같은 이유로 에서 되게 되었다 – 하지만 넓은 사용자 층에 대한 이해 부족 → 그들만의 리그 – 다른 프레임워크의 상황인식이 부족
  • 30. ❖ Tensorflow 2.0에서는 keras가 대표 api라는데...
  • 31. ❖ 로 구현된 내 프로젝트를 어떻게 최소한의 노력으로 로 옮길 수 있을까 – → 는 구글이 로 제공함 • https://www.tensorflow.org/api_docs/python/tf/keras/estima tor/model_to_estimator – How about estimator → keras?
  • 34. ❖ 에서 에 대한 몇 가지 사실 – 왜 매우 를 가지고 있다 – 으로 이 가능하다 – 로 하는 를 제공한다 – 는 이외의 로 만들수 있을까
  • 35. ❖ 에서 에 대한 몇 가지 사실 – 왜 매우 를 가지고 있다 – 으로 이 가능하다 – 로 하는 를 제공한다 – 는 이외의 로 만들수 있을까
  • 38. 로 다음과 같은 구조로 가능할까
  • 39. 로 다음과 같은 구조로 가능할까 build_model() 입출력을 - get_keras_model()에서 tf.keras.models.Model로 packaging
  • 40. Packaging MyModel as a tf.keras.models.Model class MyModel(object): def __init__(self, args): # Keras model에서 사용할 파라미터를 정의하는 부분 def build_model(self, inputs): # model을 정의하는 부분 def build_model(self, inputs): # tf.keras.models.Model로 packaging 하는 부분
  • 41. Packaging MyModel as a tf.keras.models.Model class MyModel(object): def __init__(self, args): self.model = None def build_model(self, inputs): net = tf.keras.layers.Embedding()(inputs) … return outputs = tf.keras.layers.Dense()(net) def get_keras_model (self): input = tf.keras.layers.Input(shape=...) output = self.get_keras_model(input) self.model = tf.keras.models.Model(inputs=input,outputs=output) return self.model
  • 42. 해야 할일을 정리하면 ❖ 안되있는 경우 파트를 독립적으로 분리한다 ❖ 안되있는 경우 를 분리한다 ❖ 으로 모델 인스턴스 생성 – – ❖ 와 으로 훈련한다
  • 43. 주의 사항 ❖ 몇가지 – 로 구현한 코드와는 호환되지 않음 • • 호환 – 대부분의 와는 호환할듯 전부 미확인 • 의 대부분과 호환 • 도 호환될듯 미확인 – 아직 이 동일 하게 생성됐는지 미확인
  • 44. 주의 사항 ❖ 몇가지 – 로 구현한 코드와는 호환되지 않음 • • 호환 – 대부분의 와는 호환할듯 전부 미확인 • 의 대부분과 호환 • 도 호환될듯 미확인 – 아직 이 동일 하게 생성됐는지 미확인
  • 45. 그럼 로 구현한 모델은 어떻하나요 ❖ 일단 로는 변환이 어려움 – → 의 프로토콜은 적용 불가능
  • 46. 그럼 로 구현한 모델은 어떻하나요 ❖ 에서 다른 훈련 방법도 제공 – 로 가능 – 변화 때문에 날 수도 있음 @ tf.function def train(model,dataset,optimizer): for x, y in dataset: with tf.GradientTape() as tape: prediction = model(x) loss = loss_fn(prediction,y) grads = tape.gradient(target=tr_loss, sources=dnn.variables) opt.apply_gradients(grads, model.variables)
  • 47. 정리하면 ❖ 로 구현된 모델 → 로 변환 기존 프로젝트 구조 사용 가능 ❖ 로 구현된 모델 – 로 변환 불가능 – 방식으로 진행 • 하지만 이경우도 의 변동 때문에 코드 수정 불가피 ❖ 가장 좋은 것은 에서 로 저장해 놓고 불러오는것 – 이경우 코드 재사용 불가ㅠㅠ
  • 48. 누구나 마치며 • 일부 엔지니어 개발자들만 잘 쓸 수 있는 오픈소스는 완성도에 상관없이 대중화 되기 힘들다 • 오픈소스를 대중화를 위해서는 지속적인 설명과 이해를 구하면서 사용자와 신뢰 쌓아가는 시간이 필요하다 • 이것은 대중화가 된 대부분의 오픈소스들이 겪어온 과정이다 • 의 교훈에서 는 이부분을 되돌아봐야 하지 않을까
  • 49. Accelerate your AI coding with TF 2.0! Thank you for your attention