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 버전이 릴리즈되었습니다.

핸즈온 머신러닝’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월 초에는 받아볼 수 있을 것 같습니다. 🙂

TensorFlow 1.10.0 Release

텐서플로 1.10.0 버전이 릴리즈되었습니다. tf.math 하위에 수학 함수들이 정리되었고 라즈베리파이를 위한 설치 문서가 추가되었습니다. 최근 넘파이(Numpy) 1.15.0 버전이 릴리즈되었지만 텐서플로 1.10 버전은 넘파이 1.14.5까지만 지원합니다.

텐서플로 1.10 버전은 pip를 사용해 설치할 수 있습니다. 아직 파이썬 3.7 버전의 빌드는 제공하지 않습니다.

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

TensorFlow 1.10.0 RC0 Release

텐서플로 1.10 RC 버전이 릴리즈되었습니다. 1.9버전이 나온지 정말 며칠되지 않았는데 말이죠. 1.10버전부터 NVIDIA NCCL 2.2 버전을 사용합니다. 2개 이상의 GPU를 사용하는 경우 NCCL 라이브러리를 업데이트해야 합니다. 텐서플로 1.10 RC 버전은 pip 명령을 사용해 설치할 수 있습니다.

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

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

사이킷런도 0.20 버전을 준비중입니다. 아마 가을에는 릴리즈되지 않을까 생각됩니다.

최근 사이킷런에서 리팩토링된 코드 중에서 습관적으로 사용하던 np.ones(), np.zeros()np.full()로 바꾼 것이 눈에 띄입니다. 무심코 다음처럼 비효율적인 코드를 쓰게 됩니다.

np.ones((3,2)) * -1

다음과 같이 쓰는게 훨씬 직관적이고 효율적입니다. 🙂

np.full((3,2), -1.)