“케라스 창시자에게 배우는 딥러닝”이 출간되었습니다.

keras_dl_b 케라스 창시자이자 구글 AI 연구원인 프랑소와 숄레(François Chollet)의 “Deep Learning with Python“의 번역서 <케라스 창시자에게 배우는 딥러닝>이 출간되었습니다! 온라인(전자책)/오프라인 서점에서 판매(YES24교보문고, 전자책) 중입니다.

이 책은 케라스를 사용하여 딥러닝의 기초와 다양한 실전 모델을 배울 수 있도록 안내합니다. 또 프랑소와의 딥러닝에 대한 견해와 전망을 엿볼 수 있습니다. 예제 코드는 깃허브에 공개되어 있습니다. 블로그에 실었던 원서에 대한 소개번역 후기도 참고하세요.

케라스의 새 버전에 맞추어 코드를 수정하고 에러타를 꾸준히 반영하겠습니다. 도서 메일링 리스트에 가입하면 편하게 에러타를 확인할 수 있습니다.

저자 프랑소와도 맘에 든다고 하네요! 🙂

책을 만드는 데 도움을 주신 많은 분들께 다시 한번 감사드립니다!

“파이썬 라이브러리를 활용한 머신러닝” 사이킷런 0.20 업데이트

사이킷런 0.20 버전이 릴리스되었습니다. <파이썬 라이브러리를 활용한 머신러닝> 도서에 영향을 미치는 부분을 정리하여 에러타로 등록하였습니다. 깃허브의 코드도 최신 라이브러리 버전에서 모두 재실행하여 커밋하였습니다. 자세한 변경 내용은 <파이썬 라이브러리를 활용한 머신러닝>의 에러타 페이지를 참고해 주세요. 다음은 주요 변경 내용입니다.

  • 사이킷런 0.19 버전 이하에서는 LinearSVC와 liblinear를 사용하는 LogisticRegression의 verbose 매개변수가 0이 아니고 max_iter 반복 안에 수렴하지 않을 경우 반복 횟수를 증가하라는 경고 메세지가 나옵니다. 사이킷런 0.20 버전부터는 verbose 매개변수에 상관없이 max_iter 반복 안에 수렴하지 않을 경우 반복 횟수 증가 경고가 나옵니다. 경고 메세지를 피하기 위해 max_iter 매개변수의 기본값을 증가시킵니다.
  • 향후 사이킷런 0.22 버전에서 LogisticRegression 클래스의 solver 매개변수 기본값이 liblinear에서 lbfgs로 변경될 예정입니다. 사이킷런 0.20 버전에서 solver 매개변수를 지정하지 않는 경우 이에 대한 경고 메세지를 출력합니다. 경고 메세지를 피하고 출력 결과를 일관되게 유지하기 위하여 solver 매개변수를 liblinear로 설정합니다.
  • 사이킷런 0.20 버전에서 LogisticRegression의 multi_class 매개변수 옵션에 auto가 추가되었습니다. auto로 설정하면 이진 분류이거나 solver가 liblinear일 경우에는 ovr을 선택하고 그 외에는 multinomial을 선택합니다. 사이킷런 0.22 버전부터는 multi_class 매개변수의 기본값이 ovr에서 auto로 변경됩니다. 경고 메세지를 피하기 위해 명시적으로 ovr 옵션을 지정합니다.
  • 사이킷런 0.20 버전에서 SVC ​클래스의 gamma 매개변수 옵션에 auto외에 scale이 추가되었습니다. auto는 1/n_features, 즉 특성 개수의 역수입니다. scale은 1/(n_features * X.std())로 스케일 조정이 되지 않은 특성에서 더 좋은 결과를 만듭니다. 사이킷런 0.22 버전부터는 gamma 매개변수의 기본값이 auto에서 scale로 변경됩니다. 서포트 벡터 머신을 사용하기 전에 특성을 표준화 전처리하면 scale과 auto는 차이가 없습니다. 경고를 피하기 위해 명시적으로 auto 옵션을 지정합니다.
  • 사이킷런 0.22 버전에서 OneHotEncoder 클래스가 데이터에서 정수 카테고리를 인식하는 방식이 변경될 예정입니다. 종전에는 훈련 데이터에 나타난 0~최댓값 사이 범위를 카테고리로 인식하여 원-핫 인코딩하지만 0.22 버전부터는 고유한 정수 값을 카테고리로 사용합니다. 후자의 경우 0~최댓값 사이의 정수라도 훈련 데이터에 없는 값을 변환하려면 에러가 발생합니다. 경고 메세지를 피하고 고유한 정수 값을 사용하는 방식을 선택하려면 categories 매개변수를 auto로 지정합니다.
  • 사이킷런 0.22 버전에서 cross_val_score 함수와 GridSearchCV 클래스의 cv 매개변수 기본값이 3에서 5로 바뀔 예정입니다. 0.20 버전에서 cv 매개변수를 지정하지 않는 경우 이에 관한 경고 메세지가 출력됩니다. 경고 메세지를 피하기 위해 cv 매개변수 값을 명시적으로 3으로 지정합니다.
  • 사이킷런 0.22 버전부터는 GridSearchCV와 RandomizedSearchCV의 iid 매개변수 기본값이 True에서 False로 바뀝니다. 0.24 버전에서는 이 매개변수가 아예 삭제될 예정입니다. iid 매개변수가 True이면 독립 동일 분포라고 가정하고 테스트 세트의 샘플 수로 폴드의 점수를 가중 평균합니다. False로 지정하면 단순한 폴드 점수의 평균입니다. False일 때 기본 교차 검증과 동작 방식이 같습니다. 사이킷런 0.20 버전에서 iid 매개변수가 기본값일 때 가중 평균과 단순 평균의 차이가 10^-4 이상이면 경고 메세지가 발생합니다. 경고 메세지를 피하기 위해 GridSearchCV의 iid 매개변수를 True로 설정합니다.

ML Yearning 완결

clzytu7wkaalj-a 앤드류 응(Andrew Ng)이 2016년 6월부터 쓰기 시작한 Machine  Learning Yearning이 드디어 완결되었습니다. 이 책은 총 58개의 장, 118페이지로 구성되어 있습니다. 각 챕터는 머신러닝 프로젝트를 수행하기 위해 꼭 알아야 할 개념과 노하우를 담고 있습니다. 프로그램 코드는 없지만 Cookbook 스타일처럼 느껴집니다.

이 책을 받으려면 deeplearning.ai 뉴스레터에 가입해야 합니다. 완결된 PDF을 블로그에서 직접 다운로드할 수 있도록 올려 놓았습니다.

각 장은 몇 개의 카테고리로 묶여 있습니다. 카테고리 제목을 보면 이 책에 담긴 주제들을 이해하기 좋습니다.

  1. Setting up development and test sets
  2. Basic Error Analysis
  3. Bias and Variance
  4. Learning curves
  5. Comparing to human-level performance
  6. Training and testing on different distributions
  7. Debugging inference algorithms
  8. End-to-end deep learning
  9. Error analysis by parts

이 책은 Draft 버전입니다. 정식 책으로 출판될지는 아직 확실하지 않습니다.

Tensorflow 1.11.0 & Scikit-Learn 0.20.0 Release

텐서플로 1.11.0사이킷런 0.20.0 버전이 릴리즈되었습니다.

텐서플로 1.11.0부터는 cudnn 7.2 버전으로 패키징이 되어 있습니다. cudnn은 NVIDIA 개발자 사이트에서 다운로드 받을 수 있습니다. CUDA 9.0과 cudnn 7.3 버전에서 정상 작동됩니다. 텐서플로는 pip 명령으로 설치할 수 있습니다. 파이썬 2.7(윈도우즈제외), 3.5, 3.6 버전을 지원합니다.

$ pip install --upgrade tensorflow
$ pip install --upgrade tensorflow-gpu

사이킷런 0.20.0은 pipconda를 사용하여 설치할 수 있습니다.

$ conda update scikit-learn
$ pip install --upgrade scikit-learn

TensorFlow 1.11.0 RC0 Release

텐서플로 1.11.0 RC0 버전이 릴리즈되었습니다. 1.11.0 버전부터는 cudnn 7.2 이상을 설치해야 합니다. 1.11.0에서 바뀐 자세한 내용은 릴리즈 노트를 참고해 주세요.

텐서플로 1.11.0 RC0 버전은 pip를 사용해 설치할 수 있습니다.

$ pip install --upgrade --pre tensorflow
$ pip install --upgrade --pre tensorflow-gpu

(업데이트) 1.11.0 RC1 버전이 릴리즈되었습니다.

(업데이트) 1.11.0 RC2 버전이 릴리즈되었습니다.

핸즈온 머신러닝’s 넘파이 튜토리얼

핸즈온 머신러닝 깃허브에 있는 부록 중 넘파이 튜토리얼을 번역하여 커밋하였습니다. 내용이 길어 생각보다 훨씬 오래 걸린 것 같습니다. 이 노트북을 막다운으로 변경하여 블로그의 핸즈온 머신러닝 1장, 2장 문서에도 포함했습니다. 재미있게 봐주세요! 🙂

Scikit-Learn 0.20 RC1 Release

사이킷런 0.20 버전이 예상대로 가을에 출시될 것 같네요. 0.20 RC1 버전이 릴리즈되었습니다.

conda install scikit-learn=0.20rc1 -c conda-forge/label/rc -c conda-forge
# 또는
pip install --pre scikit-learn

0.20 버전에 추가, 변경된 내용이 많습니다. 전체 변경 내용은 릴리즈 노트를 참고하세요. 그중에서도 가장 필요했던 것이 판다스 데이터를 그대로 주입해 전처리할 수 있는 ColumnTransformer가 아닐까 싶습니다. 핸즈온 머신러닝 2장 노트북에는 이미 적용되어 있습니다. 🙂

0.20 버전의 중요 기능을 정리하고 “파이썬 라이브러리를 활용한 머신러닝“의 내용도 보강해야 겠네요. 덤으로 scipy-lectures.org 도 새로 릴리즈 되었습니다!

핸즈온 머신러닝 주피터 노트북 업데이트 안내

핸즈온 머신러닝의 원서 주피터 노트북이 조금 업데이트되었습니다. 변경된 내용을 번역서의 깃허브에도 반영하였습니다. 다음은 변경된 상세 내용입니다.

  • 14_recurrent_neural_networks.ipynb
    • 레버(Reber) 문법 연습문제에서 my_reber_classifier의 경로를 변경하고 추정 확률을 퍼센트로 나타냅니다.
      with tf.Session() as sess:
      saver.restore(sess, "my_reber_classifier")
      y_proba_val = y_proba.eval(feed_dict={X: X_test, seq_length: l_test})
      
      print()
      print("레버 문자열일 추정 확률:")
      for index, string in enumerate(test_strings):
      print("{}: {:.2f}%".format(string, y_proba_val[index][0]))

      을 다음으로 변경합니다.

      with tf.Session() as sess:
      saver.restore(sess, "./my_reber_classifier")
      y_proba_val = y_proba.eval(feed_dict={X: X_test, seq_length: l_test})
      
      print()
      print("레버 문자열일 추정 확률:")
      for index, string in enumerate(test_strings):
      print("{}: {:.2f}%".format(string, 100 * y_proba_val[index][0]))
  • 02_end_to_end_machine_learning_project.ipynb
    • 사이킷런의 0.20 버전에 포함될 ColumnTransformer를 사용하면 책의 예제에서처럼 DataFrameSelectorFeatureUnion을 사용하지 않고 간단히 전체 파이프라인을 만들 수 있습니다. 아직 사이킷런 0.20 버전이 릴리스되기 전이므로 여기서는 future_encoders.pyColumnTransformer를 넣어 놓고 사용합니다.
      from future_encoders import ColumnTransformer
      
      num_attribs = list(housing_num)
      cat_attribs = ["ocean_proximity"]
      
      full_pipeline = ColumnTransformer([
      ("num", num_pipeline, num_attribs),
      ("cat", OneHotEncoder(), cat_attribs),
      ])
      
      housing_prepared = full_pipeline.fit_transform(housing)
      housing_prepared
  • 11_deep_learning.ipynb
    • 텐서플로 모델 재사용하기에서 노드 이름 수정
      hidden3 = tf.get_default_graph().get_tensor_by_name("dnn/hidden4/Relu:0")

      을 다음으로 변경합니다.

      hidden3 = tf.get_default_graph().get_tensor_by_name("dnn/hidden3/Relu:0")
  • 11_deep_learning_exercises.ipynb
    • 불필요한 변수 초기화 루틴 삭제
      for var in output_layer_vars: 
          var.initializer.run()
  • extra_tensorflow_reproducibility.ipynb 파일 추가

감사합니다! 🙂

Deep Learning with Python 번역 후기

chollet-dlp-hi원래는 좀 더 일찍 시작했어야 했지만 ‘핸즈온 머신러닝‘ 작업이 늦어지면서 4월에 들어서 시작하였습니다. 케라스를 만든 프랑소와 숄레가 직접 쓴 책이라 이전부터 기대가 컸습니다. 역시나 아마존에서 높은 인기를 끌고 있네요. 4개월 동안의 작업을 마무리하면서 번역의 후기를 남깁니다.

‘Deep Learning with Python’은 케라스를 사용하여 딥러닝의 다양한 모델을 배울 수 있도록 안내합니다. 합성곱, 순환 신경망을 포함하여 컨브넷 필터 시각화, 딥드림, 뉴럴 스타일 트랜스퍼, VAE, GAN까지 다루고 있습니다. 재미있게도 수학 공식을 극도로 줄이고 대부분의 이론 설명을 파이썬 코드로 풀어갑니다. 딥러닝을 공부하려는 소프트웨어 엔지니어를 주요 독자층으로 생각하기 때문입니다.

순조롭게 진행되던 번역 작업은 6장을 만나면서 암초에 부딪혔습니다. 눈에 띄는 에러타(프랑소와가 왜 이렇게 썼을까..)가 많이 나왔습니다.  반면 매닝의 에러타 포럼 페이지는 사용자들이 올린 에러타만 쌓일 뿐 이에 대한 반응이 거의 없습니다. 저자가 바쁘기 때문인지 아니면 출판사의 게으름인지 알 도리가 없습니다. 신중하게 에러타를 선별하여 번역서에 반영하였습니다.

또 한번의 암초는 이번 여름의 더위입니다. 너무나 더워서 자정이 넘어서도 키보드를 두드릴 수가 없었죠. 거북이 같던 걸음마였지만 조금씩 진행된 것이 쌓여 결국 모든 번역을 마무리할 수 있었습니다. 이젠 조금 선선해진(?) 날씨에 1차 역자 교정을 마치고 홀가분한 마음으로 이 글을 적습니다. 남은 것은 머릿말과 저자 소개 정도네요.

이 책은 1부와 2부로 나뉘어져 있습니다. 1부(1장~4장)는 딥러닝의 기초, 2부(5장~9장)는 실전 딥러닝의 내용을 담고 있습니다. 간단한 목차는 다음과 같습니다.

  1. 딥러닝이란 무엇인가?
  2. 시작하기 전에: 신경망의 수학적 구성 요소
  3. 신경망 시작하기
  4. 머신 러닝의 기본 요소
  5. 컴퓨터 비전을 위한 딥러닝
  6. 텍스트와 시퀀스를 위한 딥러닝
  7. 딥러닝을 위한 고급 도구
  8. 생성 모델을 위한 딥러닝
  9. 결론

이 책에서 맘에 드는 두 개의 장을 고르라면 6장과 9장입니다. 6장은 시퀀스 처리를 위한 딥러닝을 소개합니다. 기본 RNN으로 시작해서 LSTM, GRU, 양방향 RNN, 1D 컨브넷과 이들의 조합으로 텍스트와 시계열 데이터를 처리하는 다양한 예를 소개합니다. 다른 딥러닝 책에 비해 RNN에 대한 내용이 좀 더 풍부합니다. 9장은 책의 전체 내용을 정리하면서 딥러닝의 한계와 발전 방향에 대해 소개를 합니다. 이 장에서 저자가 생각하는 딥러닝의 방향과 비전을 엿볼 수 있어 아주 좋았습니다.

번역서는 <케라스 창시자에게 배우는 딥러닝>이란 제목으로 출간될 예정입니다. 8월 말부터 베타 테스트를 시작합니다. 조판과 디자인까지 완료되면 10월 초에는 받아볼 수 있을 것 같습니다. 🙂