태그 보관물: TensorFlow

TensorFlow 2.2의 사용자 정의 훈련 반복

텐서플로 2.2의 케라스 API에 train_step 메서드가 추가되었습니다. 이 메서드를 오버라이드하여 사용자 정의 훈련 반복을 케라스 모델 클래스에 통합하는 방법을 소개하는 짧은 영상을 만들었습니다. 재미있게 보세요! 🙂

핸즈온 머신러닝 2/E 번역 후기

핸즈온 머신러닝 2판(Hands-on Machine Learning with Scikit-Learn, Keras & TensorFlow)의 번역을 마치고 후기를 남깁니다. 2판 원서는 작년 9월에 나왔습니다. 1판에 이어 역시 아마존 베스트 셀러가 되었네요. 번역 완료는 예상보다 조금 늦었습니다. 많은 분들이 기다리실텐데 죄송합니다. ㅠ.ㅠ 아마 4월 중순에 서점에서 만날 수 있을 것 같습니다.

도움을 주신 한빛미디어 윤나리 님, 교정을 봐주신 백지선 님께 감사드립니다.

2판은 1판에 비해 딥러닝 부분이 대폭 바뀌었고 분량도 크게 늘어났습니다. 텐서플로 2가 릴리스되었고 케라스가 핵심 API로 채택되면서 어느정도 예상되었습니다. 원서는 800페이지가 조금 넘습니다. 번역서는 900페이지를 훌쩍 넘길 것 같습니다. 또 원서와 마찬가지로 풀 컬러로 인쇄됩니다. 그럼 어떤 부분이 바뀌었는지 간단히 정리해 보겠습니다.

신경망을 소개하는 챕터를 유지하면서 케라스 소개를 추가했습니다. 특히 케라스를 사용한 사용자 정의 모델, 층, 측정 지표, 손실 함수 등을 자세히 소개한 점이 좋습니다. 새롭게 소개된 tf.data와 TFRecord, TF Datasets을 챕터 하나를 할애하여 자세히 설명하고 있습니다.

합성곱 신경망의 서두는 1판의 내용을 유지하면서 새로운 모델과 객체 탐지(object detection)와 시맨틱 분할(semantic segmentation)을 추가했습니다. 순환 신경망은 많이 바뀌었습니다. 기계 번역을 조금 더 자세히 설명하고 어텐션 메카니즘과 트랜스포머를 소개합니다. 2판에서는 RNN과 CNN을 사용한 시퀀스 처리에 별도의 장을 할애했습니다. 이름과는 달리 1D 합성곱이 끝에 살짝 나와서 사실 RNN 장이 거의 두 배로 늘어난 셈입니다.

1판의 오토인코더 장에 GAN이 추가되었습니다. DCGAN, ProGAN, StyleGAN을 포함합니다. GAN만 보아서는 조금 아쉽습니다. 미술관에 GAN 딥러닝을 함께 보면 도움이 될 것 같습니다. 강화학습 챕터도 TF-Agents를 추가하면서 거의 두 배로 분량이 늘어났습니다. 늘어난 분량 덕택에 쪽수로 보면 2/3 정도가 딥러닝을 다루게 되었습니다.

1부는 비지도 학습 장이 추가된 것 외에는 큰 변화가 없습니다. 대부분 사이킷런 최신 버전을 반영하고 모호한 표현을 다듬거나 설명을 보완했습니다. 비지도 학습은 1판에서 아쉬웠던 부분 중 하나입니다. 2판에서는 사이킷런을 사용해 K-평균, DBSCAN, 가우시안 혼합 모델을 자세히 소개합니다. 알고리즘 소개에 그치지 않고 여러 활용 사례를 함께 다루고 있어서 좋았습니다.

마지막으로 텐서플로 분산 훈련과 배포에 관한 장도 많이 바뀌었습니다. 충분하지는 않지만 구글 클라우드의 AI 플랫폼을 다루고 있어서 좋았습니다. 때마침 한국에도 구글 클라우드 리전이 생겼으니까요. 구글 클라우드 AI 플랫폼에 대해 조금 더 깊게 다루는 다른 책을 기대하고 있습니다.


번역하는 동안 참 많은 일들이 있었습니다. 작년 말에 오랫동안 미뤄왔던 집수리를 시작했습니다. 짐을 창고에 맡기고 가족이 원룸으로 피신해서 두 달을 살았습니다. 아마 다시는 안할 것 같습니다. ㅠ.ㅠ 몸은 힘들고 고생이 많았지만 지금은 깨끗한 집에서 잘 지내고 있습니다.

이보다 조금 더 일찍 작은 프로젝트에 참여하게 되었습니다. 정해진 기간내에 일을 마쳐야 한다는 강박이 모든 사람을 힘들게 하는 것 같습니다. 원치 않는 상처를 받고 원치 않는 상처를 주고 맙니다. 돌이켜 보면 후회가 많이 됩니다. 힘들 때마다 글쓰는 것이 위로가 되었습니다. 책은 화를 내거나 불평하지 않고 온전히 저만의 세상을 만들어 주기 때문이죠.

지금은 코로나 바이러스로 전 세계가 몸살을 앓고 있습니다. 다행히 제 주변에는 아픈 사람이 없네요. 연일 들려오는 뉴스를 보면 꿈인지 현실인지 믿기지 않습니다. 책 저자인 오렐리앙은 에러타를 등록하면 회신을 잘 해줍니다. 왜 오류가 생겼는지 설명하거나 오류 같지만 아닌 이유를 설명해 주기도 합니다. 그런데 지난해 말부터 에러타에 회신이 없었습니다. 이사를 했기 때문에 바빠서 그런가 보다 생각했죠. 몇 달 만에 메일이 왔는데 그동안 매우 아팠다고 합니다. 친절하게도 코로나 바이스러스 때문에 한국 걱정도 해주었습니다(한 달 전이라 한국이 위험하다고 생각한 것 같습니다. 지금은 정 반대가 되었죠). 오렐리앙도 어서 건강을 찾아 자리를 털고 일어났으면 좋겠습니다.

코로나 바이스러스 때문에 3월 텐서플로 데브 서밋이 취소되어 (구글에서 예약해 준) 호텔과 항공권을 모두 취소했습니다. 또 5월에 초청받은 구글 IO도 취소되었죠. 한국 커뮤니티를 알릴 수 있는 좋은 기회였는데 아쉬웠습니다(심지어 텐서플로 데브 서밋에 제 얼굴과 이름이 나왔는데 말이죠). 아마 올 상반기에는 국내외를 막론하고 개발자를 위한 이벤트가 열리기 어려울 것 같습니다.


이제 곧 텐서플로 2.2.0 버전이 릴리스될 예정입니다. 새 버전에 맞춰 깃허브 노트북을 모두 다시 검토하고 노트북에 있는 텍스트도 번역해야 합니다. 또 그간 미뤄왔던 텐서플로 문서 번역에도 더 공을 들여야겠습니다.

올해는 책 복이 많을 것 같습니다. 머신러닝 분야의 또 다른 좋은 두 책이 기다리고 있기 때문입니다. 하나는 세바스찬 라시카의 Python Machine Learning 3/E입니다(2판은 머신 러닝 교과서로 번역되었습니다). 이미 아마존에서 높은 인기를 얻고 있습니다. 역시 텐서플로 2를 기반으로 많은 변화를 주었고 GAN과 강화학습이 추가되었습니다. 또 하나는 케라스 창시자인 프랑소와 숄레의 Deep Learning with Python 2/E입니다(1판은 케라스 창시자에게 배우는 딥러닝으로 번역되었습니다). 프랑소와의 책도 Keras 패키지에서 tf.keras로 바꾸고 CNN, RNN의 고급 기법을 많이 다룰 것으로 예상됩니다. 프랑소와의 책은 기술 뿐만 아니라 딥러닝에 대한 저자의 견해를 읽을 수 있기 때문에 기대가 많이 됩니다.


쓰다 보니 길어졌네요. 요즘엔 건강이 최곱니다. 코로나 바이러스 주의하시구요. 핸즈온 머신러닝 2/E은 곧 찾아 뵙겠습니다. 기대해 주세요! 🙂

TensorFlow 2.1.0 Release

텐서플로 2.1.0이 릴리스되었습니다.

2.1.0 버전이 파이썬 2.7.x를 지원하는 마지막 버전입니다. tensorflow 패키지가 기본으로 GPU를 지원합니다. 이 패키지는 GPU 유무에 상관없이 동작합니다. 2.1.0버전부터 CUDA 10.1과 cuDNN 7.6 버전을 사용합니다. CPU만 사용하려면 tensorflow-cpu 패키지를 설치하세요.

윈도우용 텐서플로는 비주얼 스튜디오 2019 버전 16.4를 사용하여 빌드되었습니다. 이를 사용하려면 여기에서 “Microsoft Visual C++ Redistributable for Visual Studio 2015, 2017 and 2019″를 설치하세요.

추가된 기능과 버그 수정의 자세한 내용은 릴리스 노트를 참고하세요.

텐서플로 2.1 버전은 다음 명령으로 설치할 수 있습니다.

# for cpu and gpu
$ pip install --upgrade tensorflow
# cpu-only
$ pip install --upgrade tensorflow-cpu

TensorFlow 2.1.0 RC0 Release

업데이트: 텐서플로 2.1.0 RC2가 릴리스되었습니다. CUDA 10.1 버전을 사용해야 합니다.

업데이트: 텐서플로 2.1.0 RC1이 릴리스되었습니다.

텐서플로 2.1.0 RC0이 릴리스되었습니다. 텐서플로 1.15.0 버전부터 CPU와 GPU 버전이 통합되었습니다. CPU 버전만 설치하려면 tensorflow-cpu 패키지를 설치하세요.

2.1.0 버전이 파이썬 2.7.x를 지원하는 마지막 버전입니다. 내년 1월에 파이썬 2.7.x에 대한 지원을 중단합니다.

tf.keras 모델의 fit_generator, evaluate_generator, predict_generator, train_on_batch, test_on_batch, predict_on_batch 메서드가 즉시실행 모드를 위한 run_eagerly 메서드를 지원합니다. 기본값인 tf.function 방식도 버그 수정되었습니다.

fit_generator, evaluate_generator, predict_generator 메서드는 deprecated 됩니다. 대신 제너레이터와 시퀀스 데이터를 받을 수 있는 fit, evaluate, predict 메서드를 사용하세요.

2.0 버전에 추가된 Normalization 클래스를 포함하여 TextVectorization 클래스가 2.1 버전에 tf.keras API에 포함되었습니다. tf.keras.preprocessing 패키지의 사용 방법에 대한 간단한 예시는 ‘텐서플로 2.0 무엇이 바뀌었을까요?‘ 슬라이드 39번을 참고하세요.

2.1 버전에서 클라우드 TPU를 지원합니다. 하지만 아직 실험적입니다. 그외 많은 기능이 개선되고 변경되었습니다. 자세한 내용은 릴리스 노트를 참고하세요.

텐서플로 2.1.0 RC 버전은 다음 명령으로 설치할 수 있습니다.

$ pip install --upgrade --pre tensorflow

GDE Summit + TensorFlow World를 다녀와서

올해 봄 ML GDE가 되고 나서 처음 구글 행사에 초청을 받아 다녀왔습니다. GDE 서밋은 전 세계 GDE(Google Developer Expert)를 초청하는 행사입니다. 웹, 안드로이드, 클라우드, 머신러닝 등 다양한 분야에서 많은 GDE들이 활동하고 있습니다.

GDE는 구글을 대표하거나 구글 제품의 홍보 대사가 아닙니다. 각 분야에서 구글 제품을 사용하는 개발자들을 돕고 구글 제품에 대해 다양한 의견을 제시하는 봉사자이자 전문가 집단입니다. 구글은 GDE의 활동을 지원하고 개인의 역량을 높일 수 있도록 돕고 있습니다.

IMG_0963.JPG

이 중에서도 머신러닝 GDE들의 숫자가 가장 크게 늘어나고 있습니다. 머신러닝 분야 자체가 성장하고 있기도 하지만 머신러닝 GDE들이 정말 활발히 활동하는 것 같습니다. 다른 분야와 다르게 컴퓨터 과학 뿐만 아니라 다양한 이력을 가진 GDE들이 많았습니다. 분야별 토론에서도 머신러닝 GDE들은 끝까지(!) 가장 활발하게 토론을 이어갔습니다. 때로는 날카로운 비판도 서슴치 않았습니다.

하지만 단지 비판이나 의견 제시에 끝나지 않습니다. 세부 토론을 거쳐 그 자리에서 개발자들을 도울 수 있는 아이디어를 내고 스스로 조직화할 계획을 세웠습니다. 놀랍지 않은가요? 이 자리에 참여할 수 있다는 것만으로도 정말 큰 영광입니다. 혹시 여러분이 구글러로부터 GDE를 해보라고 추천받는다면 두 번 생각할 것도 없습니다. IT 분야에서 가장 멋진 경험을 시작할 수 있는 기회가 생긴 것입니다. 🙂

올해 처음 열린 TensorFlow World 컨퍼런스는 오라일리가 주관하는 행사입니다. 이 컨퍼런스는 GDE 서밋이 끝나고 바로 다음날 이어서 서니베일 근처의 호텔에서 진행되었습니다. 감사하게도 일부 머신러닝 GDE들에게 컨퍼런스를 참여할 수 있는 기회가 제공되었습니다.

IMG_0922.jpg

텐서플로 월드에서 많은 세션이 열렸습니다. 머신러닝 파이프라인을 위한 TensorFlow Extended(TFX), 웹 브라우저 기반의 머신러닝 작업을 위한 TensorFlow.js, 안드로이드는 물론 아두이노와 IoT 기기를 위한 TensorFlow Lite에 대한 내용이 많았습니다. 앞으로 많은 스토리가 등장할 분야임에 틀림없는 것 같습니다. 텐서플로 월드에서 열린 일부 세션은 유튜브에서 볼 수 있습니다.

텐서플로 월드는 총 4일 동안 진행되었습니다. 1,2일차에는 교육, 튜토리얼, 컨트리뷰터 서밋이 열렸습니다. 저는 TensorFlow.js, Swift for TensorFlow 튜토리얼과 컨트리뷰터 서밋에 참가했습니다. 튜토리얼은 오전, 오후에 각 3시간씩 진행되었습니다. TensorFlow.js 튜토리얼은 단순히 코드랩을 따라하는 형식으로 진행되었기 때문에 아쉬웠습니다. Swift for TensorFlow는 스위프트 언어 자체와 텐서플로를 모두 다루어야 했기 때문에 시간이 절대적으로 부족했습니다.

텐서플로 문서 번역에 기여한 기회로 텐서플로 컨트리뷰터 서밋에도 참여했습니다. 다양한 SIG 그룹에 대해 자세히 알 수 있었습니다. 또 텐서플로 문서 관리자인 빌리와도 반갑게 인사를 나누고 인증샷을 찍었죠(생각보다 훨씬 키가 크더군요)!

IMG_1027.JPG

컨트리뷰터 서밋에서 “I contribute to TensorFlow” 배지를 나누어 주어서 백팩에 자랑스럽게 붙였습니다. 돌아오는 비행기에서 짐을 넣을 자리가 부족해 승무원이 옆 자리 칸에 올려 주었는데 나중에 확인해 보니 검은 배지가 사라졌습니다! ㅠ.ㅠ 아마도 공간이 부족해서 가방을 밀어 넣다 보니 떨어져서 어딘가에 굴러다닐 것으로 생각되었습니다. 찾지 못하면 너무 아쉬울 것 같았습니다.

도착 몇 시간을 남겨 놓고 승객들이 모두 내리면 같이 찾아보자고 승무원에게 부탁했습니다. 그런데 한 승무원이 바닥에 떨어진 배지를 본 것 같다며 주위 바닥을 모두 샅샅이 뒤져서 찾아 주었습니다! 정말 어찌나 고맙던지요!

IMG_5552.JPG

몸은 피곤했지만 (집에 와서 14시간을 잤습니다 @.@) 정말 큰 동기부여를 얻은 좋은 기회였습니다. 같이 참석했던 다른 GDE들을 보면서 부족함을 많이 느꼈습니다. 그렇다고 너무 주눅들거나 겁낼 필요는 없습니다. 항상 발전해 가는 과정 자체가 즐거움이니까요! 😀

TensorFlow 1.15.0 Release, Keras 2.3.1 Release

TensorFlow 1.15.0 버전이 릴리스되었습니다. 알려진 것처럼 1.15.0 버전은 텐서플로의 마지막 1.x 버전입니다. 1.15.0 버전부터 tensorflow 패키지가 CPU와 GPU를 모두 지원합니다. 시스템에 GPU가 장착되어 있으면 기본적으로 GPU 모드로 작동합니다. 다운로드 크기 때문에 CPU 버전으로 설치하려면 tensorflow-cpu 패키지를 설치하세요. tensorflow-gpu 패키지도 아직 제공합니다.

# for CPU and GPU
$ pip install --upgrade tensorflow==1.15.0
# only GPU
$ pip install --upgrade tensorflow-gpu==1.15.0
# only CPU
$ pip install --upgrade tensorflow-cpu==1.15.0

텐서플로 1.15.0 버전은 compat.v2 모듈 아래 텐서플로 2.0 기능을 완전히 구현하였습니다. 1.x 기능은 compat.v1 모듈로 참조할 수 있습니다. 1.x와 2.0 버전 변화에 따른 영향을 최소화하려면 두 모듈을 사용하여 코드를 만드세요. 케라스 모델의 save() 메서드의 기본 저장 포맷이 텐서플로의 SavedModel 포맷으로 바뀌었습니다. 또 케라스 층에서 float32가 기본이 됩니다.

또 케라스 2.3.0 버전의 버그를 수정한 2.3.1 버전이 릴리스되었습니다.

TensorFlow 2.0.0 Release!!!

텐서플로 2.0이 릴리스되었습니다! 예상보다 정식  버전이 빨리 나왔네요. 텐서플로 2.0에 대한 소개는 이펙티브 텐서플로 2.0릴리스 노트를 참고하세요.

텐서플로 2.0 버전은 pip 명령으로 설치할 수 있습니다.

# for cpu
$pip install --upgrade tensorflow
# for gpu
$pip install --upgrade tensorflow-gpu

코랩(Colab)은 아직 1.14.0 버전입니다. 🙂

TensorFlow 1.15.0 RC0, 2.0.0 RC1 Release

TensorFlow 1.15.0 RC0 버전이 릴리스되었습니다. 알려진 것처럼 1.15.0 버전은 텐서플로의 마지막 1.x 버전입니다. 1.15.0 버전부터 tensorflow 패키지가 CPU와 GPU를 모두 지원합니다. 시스템에 GPU가 장착되어 있으면 기본적으로 GPU 모드로 작동합니다. 다운로드 크기 때문에 CPU 버전으로 설치하려면 tensorflow-cpu 패키지를 설치하세요. 하지만 아직 tensorflow-gpu 패키지도 제공합니다.

# for CPU and GPU
$ pip install --upgrade tensorflow==1.15.0rc0
# only GPU
$ pip install --upgrade tensorflow-gpu==1.15.0rc0
# only CPU
$ pip install --upgrade tensorflow-cpu==1.15.0rc0

텐서플로 1.15.0 버전은 compat.v2 모듈 아래 텐서플로 2.0 기능을 완전히 구현하였습니다. 1.x 기능은 compat.v1 모듈로 참조할 수 있습니다. 1.x와 2.0 버전 변화에 따른 영향을 최소화하려면 두 모듈을 사용하여 코드를 만드세요.

TensorFlow 2.0.0 RC1 버전이 릴리스되었습니다. 10월 텐서플로 월드 전에 정식 버전이 릴리스될 것 같습니다. 제가 텐서플로 월드에 직접 참석합니다. TensorFlow Lite, Swift for TensorFlow 튜토리얼과 재미있는 여러 세션을 들을 예정입니다. 인증샷과 함께 도움되는 후기를 올리겠습니다. 🙂

텐서플로 2.0 RC1 버전도 pip 명령으로 설치할 수 있습니다.

# for CPU
$ pip install --upgrade tensorflow==2.0.0rc1
# for GPU
$ pip install --upgrade tensorflow-gpu==2.0.0rc1

(업데이트) TensorFlow 1.15.0 RC1이 릴리스되었습니다.

(업데이트) TensorFlow 1.15.0 RC2가 릴리스되었습니다.

(업데이트) TensorFlow 2.0.0 RC2가 릴리스되었습니다.

TensorFlow 2.0.0 RC0 Release

드디어 텐서플로 2.0의 Release Candidate가 나왔습니다. 혹시 10월에 열리는 텐서플로 월드에서 정식 버전이 릴리스되지 않을까 기대해 봅니다. 텐서플로 2.0에 대한 소개는 이펙티브 텐서플로 2.0릴리스 노트를 참고하세요.

텐서플로 2.0 RC0 버전은 pip 명령으로 설치할 수 있습니다.

# for cpu
$pip install --upgrade tensorflow=2.0.0rc0
# for gpu
$pip install --upgrade tensorflow-gpu=2.0.0rc0

텐서플로 1.15.0 버전에서는 CPU 버전과 GPU 버전이 통합될 예정입니다. 설치시 다운로드 용량이 부담되는 경우에는 tensorflow-cpu 를 설치할 수 있습니다.

TensorFlow 1.14.0 Release

텐서플로 1.14.0 버전이 릴리스되었습니다. 2.0 버전과 호환성을 고려하여 개발하려면 새로 추가된 compat.v2 모듈을 사용하세요. CPU 버전에서 MKL-DNN 라이브러리가 기본으로 사용됩니다. 윈도우즈 이외의 시스템에서는 라이브러리 파일이 버전 관리됩니다.

자세한 내용은 릴리스 노트를 참고하세요. 텐서플로 1.14.0 버전은 pip를 사용해 설치할 수 있습니다.

$ pip install tensorflow
$ pip install tensorflow-gpu