카테고리 보관물: Deep Learning

TensorFlow nightly 2.0 preview

텐서플로 2.0 RC 버전이 언제 등장할지 아직 모르지만 맛보기는 가능합니다. 텐서플로 2.0 preview 버전이 pip로 제공되고 있습니다. 아쉽지만 리눅스 버전만 있습니다.

$ pip install tf-nightly-2.0-preview
$ pip install tf-nightly-gpu-2.0-preview

이 프리뷰는 현재 마스터 브랜치를 기반으로 빌드된 것 같습니다. 이전에 공지된 대로 tf.Session() 등이 tf.compat.v1 아래로 이동되고 즉시 실행(eager execution)이 기본으로 활성화됩니다.

텐서플로 2.0 방식을 적용한 MNIST 예제 노트북은 여기를 참고하세요. 이 노트북은 즉시 실행 튜토리얼과 많이 비슷한 것 같습니다. 또한 2.0 마이그레이션 스크립트를 참고하면 변경될 모습을 미리 가늠해 볼 수 있습니다. 🙂

(업데이트) 미디엄(Medium)에 텐서플로 2.0에 대한 포스팅이 올라왔습니다. 조만간 RC 버전이 릴리즈될 것 같네요. 이 글을 보면 이전에 언급한 대로 기존의 다양한 연산들이 케라스 API로 통일된다는 것을 알 수 있습니다. 케라스 API를 사용하는 방법은 Sequential 클래스나 Model 클래스입니다. 또한 tf.GradientTape() 함수를 사용하여 직접 그래디언트를 업데이트할 수도 있습니다. 다행히 Estimators는 구현이 바뀌겠지만 API는 유지된다고 하네요.

앞으로는 텐서플로를 배우려면 케라스를 배워야 합니다. 당연하지만 케라스를 배우는 가장 좋은 방법은 제가 번역한 <케라스 창시자에게 배우는 딥러닝> 책이죠! 🙂

Architects of Intelligence & Dive into DL

‘Rise of the Robots’의 작가 마틴 포드가 새 책 ‘Architects of Intelligence‘를 출간했습니다. 지구 최고의 인공지능 연구자들을 인터뷰했네요. 요슈아 벤지오, 제프리 힌튼, 얀 리쿤, 앤드류 응 등등. 인터뷰이 목록이 후덜덜합니다. 🙂

현재 인공지능 기술과 향후 발전에 대한 소견이 주를 이루는 것 같습니다. 너무 기술적이지 않으므로 가벼운 마음으로 읽을 수 있을 것 같네요. 팩트에서 출간했고 사파리온라인북스를 구독하고 계시다면 바로 읽을 수 있습니다.

아마존 딥러닝 연구자들이 쓴 오픈소스 책 ‘Dive into Deep Learning‘이 공개되었습니다. 웹 사이트와 깃허브, PDF로 제공됩니다. 원래 먼저 중국어 버전이 쓰여진 것 같네요. 소스코드는 아직 영어로 번역되지 않았습니다.

이 책은 MXNet을 라이브러리를 사용합니다. MXNet에 관심있는 사람에게 좋을 것 같네요. 🙂

TensorFlow 1.12.0 Release

텐서플로 1.12.0 버전이 릴리스되었습니다. 케라스 모델이 SavedModel 포맷(via tf.contrib.saved_model.save_keras_model())과 tf.data.Dataset을 지원합니다.

텐서플로 1.12.0 버전은 pip 명령으로 손쉽게 설치할 수 있습니다. 파이썬 2.7, 3.3, 3.4(이상 윈도우즈 제외), 3.5, 3.6 버전을 지원합니다.

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

CPU 사용자를 위한 conda 텐서플로 패키지는 아직 1.12.0 버전이 준비되지 않았습니다. 🙂

pip install tensorflow vs conda install tensorflow

tensorflowtraining

아나콘나(Anaconda)의 텐서플로가 1.9.0 버전부터 MKL-DNN 라이브러리를 사용하여 패키징되었습니다. 이 때문에 pip에 등록된 텐서플로 패키지보다 몇 배 빠르다고 합니다(미디엄 포스트, 아나콘다 블로그). 물론 CPU를 사용할 경우에 국한된 이야기입니다. 아나콘다에 포함된 파이썬 과학 패키지들이 MKL 라이브러리의 덕을 보는데요. 이제 텐서플로도 해당되는 것 같습니다. 앞으로는 CPU 텐서플로 설치 안내에 꼭 아나콘다도 포함해야 겠네요. 🙂

“핸즈온 머신러닝” 사이킷런 0.20 업데이트

사이킷런 0.20 버전에 맞추어 <핸즈온 머신러닝> 도서에 반영될 내용을 정리하였습니다. 깃허브 주피터 노트북에는 더 많은 내용이 반영되어 있습니다! 🙂

  • sklearn.preprocessing.Imputer 클래스는 사이킷런 0.22 버전에서 삭제될 예정입니다. 대신 0.20 버전에서 추가된 sklearn.impute.SimpleImputer 클래스로 변경합니다.
    • (p100) 두 번째 문단 시작 부분에 “사이킷런의 Imputer는 누락된 … 지정하여 Imputer의 객체를 생성합니다.”를 “사이킷런의 SimpleImputer는 누락된 … 지정하여 SimpleImputer의 객체를 생성합니다.”로 변경합니다. 첫 번째 코드 블럭에서
      from sklearn.preprocessing import Imputer
      imputer = Imputer(strategy=”median”)

      from sklearn.impute import SimpleImputer
      imputer = SimpleImputer(strategy=”median”)
      로 변경합니다.
    • (p101) 주석 34의 첫 문장에서 ‘(예를 들면 Imputer(strategy=”median”) )’를 ‘(예를 들면 SimpleImputer(strategy=”median”) )’로 변경합니다.
    • (p108, 109) 파이프라인 정의 코드에서 ‘Imputer(strategy=”median”)’을 ‘SimpleImputer(strategy=”median”)’로 변경합니다.
  • OneHotEncoder 클래스가 종전에는 훈련 데이터에 나타난 0~최댓값 사이 범위를 카테고리로 인식하여 원-핫 인코딩하지만 앞으로는 고유한 정수 값 또는 문자열을 원-핫 인코딩할 수 있습니다. 정수 특성과 문자열 특성이 함께 있는 경우에는 에러가 발생합니다. 경고 메세지를 피하고 고유한 값을 사용하는 방식을 선택하기 위해 categories 매개변수를 'auto'로 지정합니다.
    • (p103) 마지막 코드 블럭에서 encoder = OneHotEncoder()를 encoder = OneHotEncoder(categories='auto')로 변경합니다.
  • 0.22 버전에서 RandomForestClassifierRandomForestRegressor 모델의 n_estimators 기본값이 10에서 100으로 늘어납니다. 경고 메세지를 피하기 위해 명시적으로 트리 개수를 10으로 지정합니다.
    • (p114, p116) 코드 블럭에서 RandomForestRegressor()를 RandomForestRegressor(n_estimators=10)으로 변경합니다.
    • (p139, p244) 코드 블럭에서 RandomForestClassifier()를 RandomForestClassifier(n_estimators=10)으로 변경합니다.
  • 공개된 훈련 데이터를 다운로드 받는 fetch_mldata 함수가 mldata.org 사이트의 잦은 에러로 openml.org 를 사용하는 fetch_openml 함수로 변경되었습니다.
    • (p124) mnist = fetch_mldata('MNIST original')을 mnist = fetch_openml('mnist_784', version=1)로 변경합니다. openml.org의 MNIST 타깃 데이터는 문자열로 저장되어 있으므로 mnist.target = mnist.target.astype(np.int)와 같이 정수로 바꾸는 것이 좋습니다.
  • 사이킷런 0.22 버전에서 LogisticRegression 클래스의 solver 매개변수 기본값이 'liblinear'에서 'lbfgs'로 변경될 예정입니다. 경고 메세지를 피하고 출력 결과를 일관되게 유지하기 위하여 solver 매개변수를 'liblinear'로 설정합니다.
    • (p192, p244) LogisticRegression()을 LogisticRegression(solver='liblinear')로 변경합니다.
  • SVCSVR ​클래스의 gamma 매개변수 옵션에 'auto'외에 'scale'이 추가되었습니다. 'auto'는 1/n_features, 즉 특성 개수의 역수입니다. 'scale'은 1/(n_features * X.std())로 스케일 조정이 되지 않은 특성에서 더 좋은 결과를 만듭니다. 사이킷런 0.22 버전부터는 gamma 매개변수의 기본값이 'auto'에서 'scale'로 변경됩니다. 서포트 벡터 머신을 사용하기 전에 특성을 표준화 전처리하면 'scale'과 'auto'는 차이가 없습니다. 경고를 피하기 위해 명시적으로 'auto' 옵션을 지정합니다.
    • (p213) 맨 아래 코드 블럭에서 SVR(kernel="poly", degree=2, C=100, epsilon=0.1)SVR(kernel="poly", gamma='auto', degree=2, C=100, epsilon=0.1)로 변경합니다.
    • (p244) SVC()를 SVC(gamma='auto')로 변경합니다.
  • LinearSVC의 verbose 매개변수가 0이 아닐 때 max_iter 반복 횟수가 부족하면 경고 메세지가 출력됩니다. 사이킷런 0.20 버전부터는 verbose 매개변수에 상관없이 max_iter 반복 안에 수렴하지 않을 경우 반복 횟수 증가 경고가 나옵니다. 경고 메세지를 피하기 위해 max_iter 매개변수의 기본값을 1,000에서 2,000으로 증가시킵니다.
    • (p206) LinearSVC(C=10, loss="hinge")를 LinearSVC(C=10, loss="hinge", max_iter=2000)으로 변경합니다.

TensorFlow 1.12.0 RC0 Release

텐서플로 1.12.0 RC0 버전이 릴리스되었습니다. 1.11.0 버전이 나온지 한달도 되지 않았는데 정말 빠르네요. 심지어 1.11.0 버전에 맞추어 재실행한 <핸즈온 머신러닝> 주피터 노트북을 아직 커밋하기도 전입니다. 🙂

케라스 모델을 SavedModel 포맷으로 저장할 수 있어(via tf.contrib.saved_model.save_keras_model()) 텐서플로 서빙에 사용할 수 있는 점이 눈에 띄입니다. 텐서플로 1.12.0 RC0 버전은 pip 명령으로 손쉽게 설치할 수 있습니다. 파이썬 2.7(윈도우즈제외), 3.5, 3.6 버전을 지원합니다.

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

사이킷런 0.20 버전은 몇몇 버그를 수정한 0.20.1 버전이 릴리스될 것 같습니다. 🙂

(업데이트) 텐서플로 1.12.0 RC1 버전이 릴리스되었습니다.

(업데이트) 텐서플로 1.12.0 RC2 버전이 릴리스되었습니다.

Keras 2.2.4 Release

<케라스 창시자에게 배우는 딥러닝> 책이 출간되자 마자 공교롭게도 케라스 2.2.4 버전이 릴리스되었습니다. 🙂  2.2.4 버전은 며칠 전 릴리스된 2.2.3 버전의 버그 픽스입니다. 주요한 변경 사항은 2.2.3 버전에 담겨 있습니다. 몇 가지 눈에 띄이는 내용을 살펴 보겠습니다. 전체 변경 내용은 케라스 2.2.3 버전의 릴리스를 참고하세요.

  • 텐서플로 1.11.0의 Keras API와 통일하기 위해 ThresholdedReLULeakyReLU의 기능을 ReLU 클래스에 추가하였습니다. 이 때문에 ReLU 클래스에 두 개의 매개변수가 추가되었습니다. ThresholdedReLUtheta 매개변수 역할을 하는 thresholdLeakyReLUalpha 매개변수 역할을 하는 negative_slope입니다. 백엔드의 relu 함수에는 이미 alpha 매개변수가 있었기 때문에 threshold 매개변수만 추가되었습니다.
  • TensorBoard 콜백 클래스에 로깅 간격을 지정할 수 있는 update_freq 매개변수가 추가되었습니다. 기본값은 'epoch'로 이전과 동일하게 에포크마다 로그를 기록합니다. 'batch'는 배치마다 로그를 기록하고 정수를 입력하면 지정된 샘플 개수마다 로그를 기록합니다. tf.keras에는 아직 반영되지 않았습니다.
  • 다른 *Pooling2D 클래스처럼 MaxPooling1D, GlobalMaxPooling1D, AveragePooling1D, GlobalAveragePooling1D 에 data_format 매개변수가 추가되었습니다. data_format 매개변수의 값이 channels_last일 때 입력은 (batch_size, steps, features) 크기의 3D 텐서이고 channels_first일 때는 (batch_size, features, steps)입니다. 기본값은 channels_last입니다.
  • Conv2DTranspose 클래스에 아트루스 합성곱을 위한 dilation_rate 매개변수가 적용되었습니다.
  • EarlyStopping 콜백 클래스에 restore_best_weights 매개변수가 추가되었습니다. 이 매개변수를 True 지정하면 patience 에포크가 지난 후의 모델이 아니라 이전 모델 중에서 최선의 가중치로 설정된 모델이 반환됩니다. 기본값은 False 입니다.
  • 이전에는 무조건 float32 타입의 넘파이 배열을 반환했던 to_categorical 함수에 dtype 매개변수가 추가되었습니다. 'float64', 'int32' 등을 지정할 수 있으며 기본값은 'float32' 입니다.

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

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

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

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

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

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

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