카테고리 보관물: Deep Learning

TensorFlow 1.13.0 support Python 3.7

그동안 텐서플로는 파이썬 3.6까지만 바이너리가 릴리스되었습니다. 많은 사람들이 파이썬 3.7 빌드를 원했었는데요. 텐서플로 1.13.0 부터 파이썬 3.7 바이너리가 공식적으로 릴리스될 예정입니다. tf-nightly 패키지에서 파이썬 3.7 빌드를 확인할 수 있습니다.

텐서플로 2.0 릴리스를 위한 깃허브 프로젝트 페이지도 오픈되었습니다. 물론 텐서플로 2.0도 파이썬 3.7을 공식적으로 지원할 예정입니다. 🙂

TensorFlow 1.13.0 RC0 Release

텐서플로 1.13.0 RC0 버전이 릴리스되었습니다. 두 달여 만에 릴리스입니다. TensorFlow Lite가 contrib 모듈 아래에서 코어로 승격되었습니다(tf.lite). 1.13.0 버전의 바이너리는 CUDA 10을 사용합니다. 더 자세한 내용은 릴리스 노트를 참고하세요.

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

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

텐서플로 2.0 준비로 한창 바쁜 것 같습니다. 텐서플로 Dev Summit이 3월에 열리는데 아마 이때쯤 나오지 않을까요? 🙂

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교보문고, 전자책) 중입니다.

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

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

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

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