태그 보관물: Keras

Keras 2.0 Release

이전에 예고됐던 케라스 2.0이 릴리즈 되었습니다. 케라스 2.0도 많은 API 변경이 있습니다. 다행히(!) 앞으로 큰 변화는 없을 것이라고 하네요. 텐서플로우와 마찬가지로 케라스로 만든 코드도 다시 손을 봐야할 것 같습니다. 2.0 버전이 이미 PyPI에 올라가 있으므로 간단히 pip 명령으로 버전을 업그레이드 할 수 있습니다. 조금 더 자세한 내용은 케라스 2.0 릴리즈 노트를 참고하세요.

TensorFlow 1.0 RC2 Release & Keras 2

텐서플로우 1.0 RC2 버전이 릴리즈되었습니다. 다음주 텐서플로우 Dev Summit 위해 달리는 것 같습니다. 그리고 케라스(Keras)의 버전 2가 준비되고 있습니다. 케라스도 버전 2에서 API 변화가 있다고 합니다. 버전 1의 API 를 그대로 쓸 수 있지만 deprecated 경고가 뜨니 바꾸긴 해야할 것 같습니다. 그리고 마이크로 소프트의 CNTK도 케라스의 백엔드로 들어올 예정입니다.

또 프랑소와 숄레가 직접 예고한 대로 케라스가 텐서플로우 코드 베이스로 들어 갑니다. 다만 기존 케라스 깃허브는 그대로 유지되며 이로 인해 미치는 영향은 없을 것이라고 합니다. 텐서플로우로 들어간 케라스는 처음에는 tf.contrib 에 있다가 tf.keras 로 바뀔 것이라 합니다. 프랑소와가 케라스 코드를 4번째 재작성하고 있다는데 몇주만에 끝낼 모양입니다. @.@

텐서플로우 1.0 RC2 버전은 pip에 패키지 명을 직접 입력하여 설치할 수 있습니다.

##### 파이썬 2.7
# Ubuntu/Linux 64-bit, CPU only, Python 2.7
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.0.0rc2-cp27-none-linux_x86_64.whl

# Ubuntu/Linux 64-bit, GPU enabled, Python 2.7
# Requires CUDA toolkit 8.0 and CuDNN v5.
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.0.0rc2-cp27-none-linux_x86_64.whl

# Mac OS X, CPU only, Python 2.7:
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.0.0rc2-py2-none-any.whl

# Mac OS X, GPU enabled, Python 2.7:
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/gpu/tensorflow_gpu-1.0.0rc2-py2-none-any.whl

##### 파이썬 3.x
# Ubuntu/Linux 64-bit, CPU only, Python 3.3
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.0.0rc2-cp33-cp33m-linux_x86_64.whl

# Ubuntu/Linux 64-bit, GPU enabled, Python 3.3
# Requires CUDA toolkit 8.0 and CuDNN v5.
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.0.0rc2-cp33-cp33m-linux_x86_64.whl

# Ubuntu/Linux 64-bit, CPU only, Python 3.4
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.0.0rc2-cp34-cp34m-linux_x86_64.whl

# Ubuntu/Linux 64-bit, GPU enabled, Python 3.4
# Requires CUDA toolkit 8.0 and CuDNN v5.
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.0.0rc2-cp34-cp34m-linux_x86_64.whl

# Ubuntu/Linux 64-bit, CPU only, Python 3.5
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.0.0rc2-cp35-cp35m-linux_x86_64.whl

# Ubuntu/Linux 64-bit, GPU enabled, Python 3.5
# Requires CUDA toolkit 8.0 and CuDNN v5.
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.0.0rc2-cp35-cp35m-linux_x86_64.whl

# Ubuntu/Linux 64-bit, CPU only, Python 3.6
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.0.0rc2-cp36-cp36m-linux_x86_64.whl

# Ubuntu/Linux 64-bit, GPU enabled, Python 3.6
# Requires CUDA toolkit 8.0 and CuDNN v5.
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.0.0rc2-cp36-cp36m-linux_x86_64.whl

# Mac OS X, CPU only, Python 3.4 or 3.5:
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.0.0rc2-py3-none-any.whl

# Mac OS X, GPU enabled, Python 3.4 or 3.5:
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/gpu/tensorflow_gpu-1.0.0rc2-py3-none-any.whl

#### 설치
$ sudo pip install --upgrade $TF_BINARY_URL

윈도우즈 CPU:

C:\> pip install --upgrade https://storage.googleapis.com/tensorflow/windows/cpu/tensorflow-1.0.0rc2-cp35-cp35m-win_amd64.whl

윈도우즈 GPU:

C:\> pip install --upgrade https://storage.googleapis.com/tensorflow/windows/gpu/tensorflow_gpu-1.0.0rc2-cp35-cp35m-win_amd64.whl

New DL Book: DL with Python

chollet-dlp-meap-hi매닝(manning) 출판사에서 새 딥러닝 책인 “Deep Learning with Python“의 MEAP 버전이 공개되었습니다. 이 책은 케라스(Keras) 개발자 프랑소와 숄레(François Chollet)가 올해 쓰기로 했던 바로 그 책입니다. 1장은 무료로 공개되어 있고 현재 3장까지 쓰여졌습니다. 전체 책은 올 가을 이후에 만날 수 있을 것 같습니다.

PART 1: THE FUNDAMENTALS OF DEEP LEARNING
1 What is Deep Learning?
2 Before we start: the mathematical building blocks of neural networks
3 Getting started with neural networks
4 Fundamentals of machine learning
PART 2: DEEP LEARNING IN PRACTICE
5 Deep learning for computer vision
6 Deep learning for text and sequences
7 Advanced neural network design
8 Generative deep learning
9 Conclusion

Keras go to TensorFlow

케라스(Keras)를 개발한 구글의 프랑소와 숄레(François Chollet)가 트위터에 남긴 글과 fast.ai 의 블로그로 미루어 보아 케라스가 텐서플로우의 contrib 아래로 들어갈 것 같습니다. 아마도 케라스에서 텐서플로우 부분만 떼어내서 들어가지 않을까 예상됩니다. tf.slim 은 contrib.laryercontrib.slim 에 있는 가장 널리 사용되는 텐서플로우 래퍼(wrapper) 중 하나입니다. 케라스가 포함되면 tf.slim과 함께 텐서플로우의 주요한 하이레벨 API 가 될 것 같습니다.

Quiver: Deep Visualization for Keras

카페(Caffe)의 모델에서 피처를 비주얼라이제이션 해 주는 Deep Visualization Toolbox(github)가 비교적 잘 알려져 있습니다. 아래 동영상으로도 유명하죠.

Deep Visualization Toolbox 의 케라스(Keras) 버전격인 퀴버(Quiver, github)가 만들어졌습니다. 케라스의 백엔드를 텐서플로우로 사용하면 퀴버가 텐서플로우에서도 유용하게 사용될 수 있을 것 같습니다. 케라스의 생태계가 빠르게 성장하고 있는 것 같네요. 아래 동영상과 깃허브 레파지토리를 함께 참고하세요.

(업데이트) 얼마전에 구글의 withgoogle.com 에 aiexperiments 가 추가되었는데요. 여기에 진 코간(Gene Kogan)이 만든 콘볼루션의 피처와 필터를 보여주는 데모 ‘What Neural Networks See‘ 가 있습니다. 동영상에서 데모를 보여주면서 설명도 해 주고 있습니다. 이 소스는 C++ 로 만들어져 있으며 깃허브에서 확인하실 수 있습니다.

Keras.js: run dl model with GPU

keras-js

케라스(Keras)로 훈련된 모델을 브라우저에서 실행시킬 수 있는 자바스크립트 라이브러리 Keras.js 가 공개되었습니다. 케라스로 만든 모델을 json 으로 출력하고 훈련된 파라메타는 HDF5로 저장합니다. 그런 후에 Keras.js 에서 제공하는 인코더로 훈련된 파라메타를 자바스크립트가 읽을 수 있도록 직렬화하여 모델 json과 함께 브라우저로 로드하여 사용합니다. Keras.js 는 WebGL 자바스크립트 라이브러인 weblas 를 사용하고 있어서 브라우저에서 GPU 가속을 사용할 수 있습니다. 기본으로 제공되는 모델 파라메타는 MNIST, ResNet50, Inception V3 등이 있습니다.

콘볼루션 뉴럴 네트워크를 훈련시킬 수 있는 자바스크립트 라이브러리로는 OpenAI 안드레이 카패시(Andrej Karpathy)의 ConvNetJS 가 유명합니다. 하지만 Keras.js 는 콘볼루션 뿐만 아니라 LSTM 모델 등 다양한 모델을 지원한다는 게 장점인 것 같습니다. 이전에 소개했던 regl-cnn 보다도 훨씬 발전된 라이브러리로 보입니다. 다양한 레이어와 활성화 함수를 구현한 Keras.js 의 소스는 깃허브에 MIT 라이센스로 공개되어 있습니다.

(업데이트) Keras.js 를 사용하여 브라우저에서 웹캠으로 찍은 이미지를 분류하는 데모가 공개되었습니다. ResNet50을 사용하였고 로딩되는데 조금 시간이 걸리지만 크롬 브라우저에서 잘 작동이 됩니다. 왼쪽 화면이 웹캠 영상이고 오른쪽 이미지가 대략 5초마다 찍힌 스샷 이미지입니다. 스샷이 찍히면 자동으로 아래쪽에 어떤 물체인지 분류가 됩니다.

kerasjs-resnet50-demo

OpenAI cleverhans training with adversarial examples

logo

OpenAI의 이안 굿펠로우(Ian Goodfellow)가 에러가 포함된 데이터(adversarial example)를 사용하여 모델을 더욱 견고하게 만들어 줄 수 있는 프레임워크 cleverhans를 오픈소스로 공개하였습니다. cleverhans는 파이썬2를 기반으로 하고 있으며 케라스(Keras)와 텐서플로우를 사용합니다. 아직 개발 초기 단계라 딱히 설치 방법을 제공하고 있지 않고 레파지토리를 클론해서 소스가 들어있는 cleverhans 디렉토리를 임포트해서 사용하면 됩니다. 현재는 MNIST 데이터를 사용한 예제만 제공되는 데 앞으로 튜토리얼이 더 추가될 수 있을 것 같습니다.

이 라이브러리는 현재 FGSM(Fast Gradient Sign Method) 방식으로 에러가 포함된 데이터(adversarial example)를 생성해 냅니다. 그리고는 이 데이터를 사용하여 모델을 다시 학습시키도록 하고 있습니다.

# Craft adversarial examples using Fast Gradient Sign Method (FGSM)
...
adv_x_2 = fgsm(x, predictions_2, eps=0.3
predictions_2_adv = model_2(adv_x_2)

# Perform adversarial training
tf_model_train(sess, x, y, predictions_2, X_train, Y_train, predictions_adv=predictions_2_adv)

처음 모델의 정확도는 약 95.9% 였지만 에러가 들어 있는 데이터에 대해서는 불과 3.5% 밖에 되지 않았습니다. 하지만 에러가 들어있는 데이터를 이용해 두번째 모델을 만들어 손실 함수(loss function)를 보정하여 학습을 시킵니다. 이로 인해 테스트 데이터의 정확도는 95.1%로 조금 낮아졌지만 에러가 있는 데이터에 대한 정확도는 56.2%로 크게 성장한 것을 확인할 수 있습니다.

Test accuracy on legitimate test examples: 0.9589203125
Test accuracy on adversarial examples: 0.03577734375
...
Test accuracy on legitimate test examples: 0.951059375
Test accuracy on adversarial examples: 0.5620109375

텐서플로우 0.10.0 + 케라스 1.1.0 에서 테스트하였습니다.

Keras 1.1.0 Release

딥러닝 래퍼 라이브러리인 케라스(Keras)의 1.1.0 버전이 릴리즈 되었습니다. 이번 버전부터 디폴트 백엔드(backend)가 씨아노(Theano)에서 텐서플로우로 변경되었습니다. 텐서플로우가 인기가 높기도 하지만 케라스 개발자 프랑소와 숄레(François Chollet)가 구글에 있으니 예상되는 변화라고 보여집니다.

Pre-trained DL Model for Keras

케라스(Keras)를 개발한 프랑소와 숄레(François Chollet)이 케라스에서 VGG16, VGG19, ResNet50 모델의 학습된 파라메타를 로드하여 사용할 수 있는 코드를 깃허브에 올렸습니다. 이 코드는 pip 패키지로 설치하는 것은 아니고 py 파일을 다운 받아서 같은 폴더에서 import 하여 사용하여야 합니다. 이외에도 곧 Inception v3 모델도 추가될 예정입니다. 디폴트로 ImageNet의 파라메타가 사용됩니다.

(업데이트) Inception v3 모델이 추가되었습니다.

(업데이트) 이제 이 모델들이 케라스 패키지(keras.applications)에 포함되었습니다. 자세한 내용은 케라스 문서를 참고하세요.

keras-rl

케라스(Keras) 기반의 강화학습 라이브러리인 keras-rl이 깃허브에 올라왔습니다. 케라스 기반으로 하고 있으므로 당연히 씨아노(Theano)와 텐서플로우(TensorFlow)를 백엔드로 선택하여 사용할 수 있습니다. keras-rl은 OpenAI Gym을 이용하여 강화학습 모델을 테스트할 수 있도록 되어 있습니다. 현재 구현되어 있는 강화학습 알고리즘은 아래와 같습니다.

  • Deep Q Learning (DQN) [1], [2]
  • Double DQN [3]
  • Deep Deterministic Policy Gradient (DDPG) [4]
  • Continuous DQN (CDQN or NAF) [6]

현재 작업 중으로 곧 추가될 알고리즘도 있습니다.

  • Asynchronous Advantage Actor-Critic (A3C) [5]