태그 보관물: TensorFlow

[Deep Learning with Python] 2판 번역 완료!

케라스(Keras) 라이브러리를 만든 프랑소와 숄레(François Chollet)의 딥러닝 책인 <Deep Learning with Python>의 2판 번역을 마쳤습니다. 원서는 현재 아마존에서 신경망 분야에서 5위에 랭크되어 있습니다. 예상대로 프랑소와의 책이라 매우 높은 인기를 얻고 있네요. 🙂

2판은 1판에 비해 많은 내용이 추가되고 콘텐츠 배열에도 변화가 있었습니다. 가장 대표적인 변화는 텐서플로 2.0 적용, 새로운 케라스 API, 합성곱과 순환 신경망 예제, 트랜스포머 추가 등입니다.

1판과 2판의 차이를 한눈에 보기 쉽게 그림으로 그려보았습니다. 그 아래에는 조금 더 자세히 2판의 장마다 1판의 어떤 부분과 연관이 있는지 새롭게 추가된 부분은 무엇인지 요약했습니다. 책을 보시는데 도움이 되셨으면 좋겠습니다. 이 번역서는 길벗 출판사를 통해 <케라스 창시자에게 배우는 딥러닝 2판>으로 곧 찾아뵙겠습니다! 🙂

  • 1장에 큰 변화는 없고 그간 바뀐 세상 물정을 반영했습니다. 1장에서부터 트랜스포머스를 언급합니다.
  • 2장의 구성은 1판과 비슷합니다. 아핀 변환, 경사 하강법, 연쇄 법칙에 대해 그림과 코드을 추가하여 자세히 설명합니다. 텐서플로의 그레이디언트 테이프를 소개하고 이를 사용해 간단한 완전 연결 신경망을 “밑바닥”부터 구현하는 예제가 추가되었습니다.
  • 1판 3장의 전반부가 확대되어 2판에서는 독립적인 3장이 되었습니다. 텐서플로와 케라스 히스토리를 조금 더 자세히 소개하고 딥러닝 작업 환경을 설명하는 부분에 코랩이 추가되었습니다. 2장에서 살짝 언급한 텐서, 변수, 그레이디언트 테이프를 다시 자세히 소개하고, 전반적인 케라스 모델 API를 소개합니다. 특히 build, call, __call__ 메서드의 존재 이유를 상세히 설명하는 부분이 눈에 띄네요.
  • 4장은 1판의 3장 후반부 예제 세 개(이진 분류, 다중 분류, 회귀)를 그대로 사용하며 내용도 거의 변화가 없습니다.
  • 1판 4장의 일부 절들이 확장되어 2판의 5장이 되었습니다. 특히 1판에 없던 과대적합의 발생 원인과 일반화란 무엇인지에 대해 매우 상세하게 설명하고 있는 점이 돋보입니다. 또한 훈련 성능을 높이기 위한 방법도 추가되었습니다.
  • 6장은 1판 4장의 마지막 절에서 간단히 소개한 머신러닝 워크플로를 확장했습니다. 문제 정의, 데이터 수집, 데이터 관련 주의 사항, 성공 지표, 전처리, 모델 개발, 규제, 튜닝, 여러가지 배포 옵션, 최적화, 유지 관리까지 모델의 전 생애주기를 다룹니다.
  • 1판은 비교적 책 후반에 함수형 API와 텐서보드를 소개합니다. 2판에서는 중간 부분으로 전진 배치 되었습니다. 2판 7장에서는 함수형 API는 물론 모델의 서브클래싱 방법, 이들을 섞어 쓰는 방법까지 자세히 소개합니다. 또한 사용자 정의 지표, 사용자 정의 콜백, 사용자 정의 훈련 루프까지 체계적으로 설명을 풀어갑니다. 훈련과 추론 로직을 완전히 밑바닥부터 새로 만드는 방법과 기존의 fit(), evaluate()를 사용하면서 나만의 알고리즘을 적용하는 방법도 모두 설명하네요.
  • 1판의 5장 합성곱 신경망이 2판에서는 두 개의 장으로 확대되었습니다. 앞부분의 고양이vs강아지 데이터셋을 사용한 컨브넷 예제들은 8장이 되었고 뒷부분의 합성곱 시각화 부분은 9장으로 넘어갔습니다. 8장의 내용은 이전과 거의 동일합니다. 주된 변경 사항은 기존의 제너레이터를 사용한 모델 훈련과 데이터 증식을 텐서플로 데이터셋과 케라스에 추가된 이미지 증식 층으로 바꾸었습니다. 덕분에 코드는 훨씬 간결하고 이해하기 쉬워졌네요. 이제 고급 컴퓨터 비전을 다루는 9장으로 넘어갑니다.
  • 9장은 고급 컴퓨터 비전을 다룹니다. 1판에 없었던 Oxford-IIIT Pet 데이터셋을 사용한 이미지 분할 예제가 추가되었습니다. 그다음 1판 7장에 있던 고급 딥러닝 구조(잔차 연결, 배치 정규화, 깊이별 분리 합성곱)가 9장으로 옮겨 왔습니다. 세 구조에 대한 설명이 크게 개선되었고 합성곱 신경망 구조의 일반적인 패턴에 대한 식견을 피력하는 절이 돋보입니다. 그다음은 1판 5장에 있던 합성곱 시각화 부분이 이어집니다. 1판에서는 필터 시각화와 히트맵 시각화를 위해 VGG16 모델을 썼었는데 2판에서는 Xception 모델을 사용합니다.
  • 1판 RNN 장이 2판에서 2개 장으로 확대되었습니다. 10장에서는 예나 온도 예제, RNN, 1D 컨브넷, LSTM, 드롭아웃, 스태킹 RNN, 양방향 RNN을 다룹니다. 자연스럽게 LSTM 등의 예제는 IMDB가 아니라 예나 데이터셋을 사용합니다. 1판과 크게 달라진 점은 제너레이터 방식이 아니라 새로운 timeseries_dataset_from_array 함수를 사용하여 코드가 훨씬 간결해졌습니다!
  • 11장은 이 책에서 가장 긴 장입니다. 1판 6장의 IMDB 텍스트 분류 예제를 주로 다루지만 완전히 새로 쓰여졌습니다. 먼저 TextVectorization 층과 함께 텍스트 전처리에 대해 자세히 소개합니다. BoW와 n-그램도 더욱 자세히 설명하고 1판에 없던 tf-idf 예제도 추가되었습니다. TextVectorization 층을 tf.data 파이프라인 또는 모델에 포함시킬 때를 명확하게 짚어주니 아주 좋네요. 그다음은 자연스럽게 임베딩 층으로 넘어가 사전 훈련된 단어 벡터를 사용하는 것까지 진행됩니다. 텍스트 분류에서 BoW와 RNN을 선택하는 기준에 대한 경험 법칙도 소개합니다. 이제 11장의 나머지 절반은 온통 트랜스포머 이야기입니다. 수식을 사용하지 않으면서 단계적으로 이해하기 쉽게 설명하는 저자의 능력이 여기에서 빛을 발합니다. 셀프 어텐션, 멀티 헤드 어텐션, 트랜스포머 인코더, 위치 임베딩까지 진행한 다음 다시 IMDB 텍스트를 분류해 봅니다. 그다음 텍스트 분류를 넘어서 기계 번역 예제(영어->스페인어)로 이동합니다. 먼저 LSTM으로 seq2seq 모델을 만들면서 인코더, 디코더의 상호 작용을 이해합니다. 그다음 트랜스포머 디코더를 만들고 트랜스포머 인코더와 합쳐서 완전한 기계 번역 모델을 만듭니다! 와우!!! 🙂
  • 12장은 생성 딥러닝을 다루며 1판의 8장과 구성이 비슷합니다. 텍스트 생성, 딥드림, 뉴럴 스타일 트랜스퍼, 변이형 오토인코더, GAN을 다룹니다. 1판과 다른 점은 LSTM과 세익스피어 데이터셋 대신 트랜스포머 디코더와 IMDB 데이터셋을 사용해 텍스트 생성 예제를 만듭니다. DCGAN 예제에서는 CIFAR10 데이터셋 대신에 CelebA 데이터셋을 사용합니다. 물론 전체 코드는 대부분 서브클래싱 방식과 최신 케라스 API로 바뀌었습니다.
  • 13장은 실전을 위한 모범 사례를 다룹니다. 원래 1판 7장에 있던 모범 사례는 (앙상블을 제외하고) 대부분 2판에서 다른 장으로 흡수되었습니다. 따라서 2판 13장에 들어간 모범 사례는 모두 새로 작성한 것입니다. 하이퍼파라미터 튜닝을 위해 KerasTuner를 소개하고, 혼합 정밀도를 사용한 훈련, 다중 GPU 훈련과 코랩 TPU 사용 방법까지 다룹니다.
  • 14장은 1판의 마지막 장과 유사하게 전체 내용을 정리하고 딥러닝에 대한 저자의 해석과 전망을 담고 있습니다. 하지만 내용이 많이 확대되었습니다. 지능이란 무엇인지, 왜 생겼는지 탐구해 보고 어떻게 달성할 수 있는지 질문합니다. 이 질문에 대한 대답으로 일반화를 달성하기 위한 추상화와 프로그램 합성을 엮어서 이야기를 풀어 갑니다. 이 장은 몇 년전 프랑소와가 쓴 지능 측정에 대한 논문에서 중요 내용을 요약한 것 같습니다. 프랑소와가 그리는 미래를 여기서 볼 수 있습니다!

텐서플로 2.9 버전이 릴리스되었습니다.

며칠 전 텐서플로 2.9버전이 릴리스되었습니다. 주요 변경 사항을 텐서플로 블로그에 소개했습니다. 요약하면 다음과 같습니다.

  • 텐서플로 2.5버전에서 실험적으로 포함되었던 인텔 oneDNN 라이브러리에 대한 최적화가 2.9버전에서 기본적으로 활성화됩니다(리눅스 패키지와 캐스케이드 레이크 이후의 CPU).
  • 모델 병렬화를 위한 DTensor API가 추가되었습니다. 자세한 내용은 DTensor Concepts, Distributed ML with DTensors, Using DTensors with Keras 문서를 참고하세요.
  • tf.function의 트레이싱 방식을 개선했습니다.
  • 텐서플로 2.8 버전에서 소개된 tf.config.experimental.enable_op_determinism()의 기능을 개선하여 실행마다 동일한 결과를 얻을 수 있습니다.
  • 옵티마이저 커스터마이징을 용이하게 하기 위해 tf.keras.optimizers.experimental API가 추가되었습니다. 향후 tf.keras.optimizers.experimentaltf.keras.optimizers.Optimizer를 대체합니다.

이 외에도 다양한 기능이 추가되고 변경되었습니다. Revisiting ResNets 모델인 tf.keras.applications.resnet_rs, L2 정규화 층인 tf.keras.layers.UnitNormalization, 새로운 규제 층인 tf.keras.regularizers.OrthogonalRegularizer, 새로운 이미지 전처리 층인 tf.keras.layers.RandomBrightness가 추가되었습니다. 더 자세한 내용은 텐서플로 릴리스 노트를 참고하세요!

<혼자 공부하는 머신러닝+딥러닝> 7장부터 시작하는 딥러닝 파트의 코드를 텐서플로 2.9 버전에서 모두 테스트하여 깃허브에 업데이트했습니다!

항상 최신 버전의 라이브러리에서 테스트하여 예제 코드에 문제가 없도록 하겠습니다! 감사합니다!

TensorFlow 2.7.0이 릴리스되었습니다.

얼마전 케라스 2.7.0 버전이 릴리스된 후 이어서 텐서플로 2.7.0 버전이 릴리스되었습니다. 당연하지만 텐서플로 2.7.0은 케라스 2.7.0 버전을 사용합니다. 주요 변경 사항으로는 서브클래싱으로 만든 케라스 모델에서 스칼라 입력을 자동으로 2D 텐서로 확장하지 않습니다. to_yaml()model_from_yaml()을 사용하지 못하며 대신 json이나 h5 포맷을 사용해야 합니다. 합성곱 층에 convolution_op() 메서드가 추가되어 커스텀 합성곱 층을 만들기 쉬워 집니다. 디버깅에 용이하도록 에러 메시지가 읽기 쉽게 제공됩니다.

더 자세한 내용은 텐서플로 2.7.0의 릴리스 노트를 참고하세요! 감사합니다. 🙂

TensorFlow 2.6.0 RC0

텐서플로 2.6.0 RC0 버전이 릴리스되었습니다. 예상대로 텐서플로 2.6 버전에서 케라스 코드가 기존 멀티백엔드 케라스 저장소인 keras-team/keras로 이동합니다. 이제 텐서플로의 케라스 tf.keras는 keras 패키지로 리다이렉션하는 역할만 수행합니다.

keras-team/keras에서 tensorflow/tensorflow로 텐서플로 백엔드 케라스가 분기했고 이제 다시 keras-team/keras로 이전합니다. 멀티백엔드 케라스는 이제 정말 안녕이라고 말해야겠군요. 😦

그 외에도 실험적인 케라스 전처리 층이 코어 모듈로 승격되었습니다. 자세한 내용은 텐서플로 2.6.0 RC0 릴리스 노트를 참고하세요.

keras-nightly 패키지

약 1년 전 케라스는 내부 구현을 모두 텐서플로로 리다이렉션하는 2.4 버전을 릴리스하면서 멀티 백엔드 케라스 버전의 종료를 알렸습니다. 향후에 keras-team/keras 저장소는 텐서플로 백엔드 전용 케라스가 되고 tf.keras가 keras-team/keras를 사용할 것으로 예상되었습니다.

올해 초부터 keras-team/keras 저장소의 코드가 다시 채워지고 있습니다. 현재는 tf.keras 코드와 싱크를 맞추는 작업(복붙)이 대부분입니다. 또 꾸준히 keras-nightly 패키지를 만들고 있습니다. 며칠 전 릴리스한 텐서플로 2.5.0 버전을 설치하면 keras-nightly 패키지가 같이 설치됩니다. 하지만 아직 keras-nightly 패키지를 사용하는 것 같지는 않습니다. 아마도 텐서플로 2.6이나 2.7 버전에서는 tf.keras가 keras 패키지로 리다이렉션되지 않을까 생각되네요.

이제 다시 from tensorflow import keras에서 import keras로 바꿀 날이 가까워 오나 봅니다. 🙂

“머신 러닝 교과서 3판”이 출간되었습니다.

세바스찬 라시카Sebastian Raschka와 바히드 미자리리Vahid Mirjalili가 쓴 아마존 베스트셀러 <Python Machine Learning 3rd Ed.>의 번역판인 <머신 러닝 교과서 3판>이 출간되었습니다!

3판은 사이킷런과 텐서플로 최신 버전의 변경 사항을 담았으며 코랩에서 실행할 수 있습니다. 특히 딥러닝 파트는 완전히 새롭게 리뉴얼되어 콘텐츠가 크게 보강되었습니다. 무엇보다도 이번에 새롭게 GAN강화 학습이 추가되어 머신러닝의 끝판왕이라고 부를만합니다!

출간에 맞추어 동영상 강의를 제작해 유튜브에 올리고 있습니다. 혼자 공부하시는 분들에게 도움이 되었으면 좋겠습니다. 궁금한 점이 있다면 블로그나 카카오 오픈채팅(http://bit.ly/tensor-chat)으로 알려 주세요!

온라인/오프라인 서점에서 판매 중입니다! 868페이지, 풀 컬러: 39,600원 [Yes24], [교보문고], [알라딘]

“케라스 창시자에게 배우는 딥러닝” 텐서플로 2.4 업데이트

<케라스 창시자에게 배우는 딥러닝>의 주피터 노트북을 텐서플로 2.4에서 재실행하여 깃허브에 업로드했습니다.

책은 멀티백엔드 케라스 버전을 기반으로 쓰여졌습니다. 깃허브 저장소의 마스터 브랜치는 멀티백엔드 케라스를 사용하지만 tf2 브랜치는 최신 텐서플로 버전을 사용합니다. 텐서플로 2.4 버전의 코드를 확인하시려면 tf2 브랜치를 참고하세요.

감사합니다! 🙂

“혼자 공부하는 머신러닝+딥러닝”, “딥러닝 일러스트레이티드” 코랩+텐서플로 2.4 테스트 완료

<혼자 공부하는 머신러닝+딥러닝>과 <딥러닝 일러스트레이티드>의 주피터 노트북을 코랩 텐서플로 2.4 버전에 모두 테스트하였습니다. 재실행된 결과는 깃허브(혼자 공부하는 머신러닝+딥러닝, 딥러닝 일러스트레이티드)나 nbviewer 페이지(혼자 공부하는 머신러닝+딥러닝, 딥러닝 일러스트레이티드)에서 볼 수 있습니다. 감사합니다! 🙂

TF Python 3.5 support drop, TF Java release

Python 3.5 버전의 지원이 2020년 9월에 종료됨에 따라 파이썬 3.5용 텐서플로도 10월부터 지원이 중지됩니다. 2020년 10월 13일부터 나이틀리(nightly) 패키지가 만들어지지 않고 향후 TF 릴리스에도 파이썬 3.5 버전은 더 이상 포함되지 않습니다. 현재 텐서플로는 파이썬 3.5, 3.6, 3.7, 3.8을 지원하고 있습니다.

텐서플로 Java 0.2.0 버전이 릴리스되었습니다. 이는 첫 번째 알파 버전으로 텐서플로 2.3.1 버전을 기반으로 구성되었습니다. 자바 사용자들에게는 기쁜 소식입니다. 하지만 자바 버전이 왜 필요한지 의문을 다는 사람도 있네요. 🙂

“GAN 인 액션”이 출간되었습니다.

GAN 인 액션“이 출간되었습니다! 284페이지 완전 컬러입니다! 🙂

이 책은 야쿠프 란그르와 블라디미르 보크의 아마존 베스트셀러인 <GANs In Action>의 번역서입니다.(아마존매닝)

좋은 책을 믿고 맡겨 주신 한빛미디어와 윤나리 편집자님께 감사드립니다. 무엇보다도 이 책을 기다려 주신 독자분들께 감사드립니다. 책을 읽는 내내 즐거운 여행이 되셨으면 좋겠습니다! 온라인/오프라인 서점에서 판매중입니다. Yes24알라딘, 교보문고한빛미디어