태그 보관물: Keras

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]

Andrew Ng’s Book: Machine Learning Yearning

clzytu7wkaalj-a 바이두(Baidu)의 앤드류 응(Andrew Ng) 박사가 ICS HPC 컨퍼런스에 참석차 방문한 독일 프랑크푸르트에서 올 여름 새로운 책을 집필할 것이라고 알렸습니다. 책 이름은 ‘Machine Learning Yearning’ 입니다. 웹 사이트 mlyearning.org 에서 이메일을 등록하면 초안이 작성되는 대로 무료로 공유 받을 수 있습니다. 이메일을 등록한 후 확인 메일을 받아 메일링 리스트 가입을 확정하여야 합니다. 간혹 확인 메일이 안올 경우도 있으니 잠시 후에 다시 시도하면 됩니다.

아마도 출간되면 ‘Deep Learning Book’ 과 함께 꼭 읽어야 할 책 목록 중에 하나가 되지 않을까 생각됩니다. 가능하면 올해안에 만나볼 수 있기를 기대해 봅니다. 드래프트를 받으면 읽고 리뷰할 수 있도록 하겠습니다.

추가로 텐서플로우와 씨아노(Theano) 래퍼(Wrapper) 라이브러리 Keras의 개발자인 구글의 프랑소와 숄레(François Chollet)가 매닝(Manning) 출판사와 딥 러닝에 관한 책을 쓰기로 계약했다는 소식이 있습니다. 아마도 Keras와 텐서플로우를 이용한 예시가 많지 않을까 생각됩니다. 이 책은 빨라야 내년 초에나 볼 수 있을 것 같습니다.

(추가) 2일만에 35,000개 이상의 메일이 가입되었다고 합니다. 앤드류 응의 인기가 실감되네요. 24일까지 메일링 리스트 가입을 받는다고 하니 서루르세요.

Deep Learning with Python

deeplearningwithpython-400Keras는 텐서플로우와 Theano를 이용하여 딥러닝 모델을 구축할 수 있는 래퍼(Wrapper) 라이브러리 입니다. Keras, Theano, TensorFlow 를 이용한 딥러닝 책이 새로 출간되었습니다. 이 책의 저자는 machinelearningmastery.com 을 운영하고 있는 Jason Brownlee 입니다.

아마도 이 책은 온라인으로 출간된 ‘First Contact with TensorFlow‘ 다음으로 나온 두번째 텐서플로우 책이 아닌가 싶습니다.

170여 페이지로 구성되어 있으며 PDF 버전으로 구매하실 수 있습니다. 가격은 $37 입니다. 가능하면 조만간 구입하여 읽어보고 리뷰를 올리도록 하겠습니다. 아래는 책에 실린 14개의 레슨과 7개의 프로젝트 목록입니다.

Lessons

Lesson 01: Theano 라이브러리 소개
Lesson 02: TensorFlow 라이브러리 소개
Lesson 03: Keras 라이브러리 소개
Lesson 04: 멀티레이어 퍼셉트론 속성 코스
Lesson 05: Keras를 사용한 첫번째 뉴럴 네트워크
Lesson 06: 딥러닝 모델 성능 평가
Lesson 07: scikit-learn과 함께 Keras 모델 사용하기
Lesson 08: 모델 직렬화(Serialization)
Lesson 09: 훈련과정에서 최적 모델 찾기
Lesson 10: 훈련과정에서 모델 변화 이해하기
Lesson 11: 드롭아웃(Dropout) 정규화(Regularization)로 오퍼피팅 피하기
Lesson 12: 학습속도 스케줄링으로 성능 강화
Lesson 13: 콘볼루션(Convolution) 뉴럴 네트워크 속성 코스
Lesson 14: 이미지 증강(Augmentation)을 이용하여 모델 성능 향상

Projects

Project 01: 클라우드를 사용하여 저렴하게 GPU에서 대규모 모델 개발
Project 02: 꽃의 종(Species)에 대한 다중(Multiclass) 분류
Project 03: 수중음파 탐지 데이터를 이용한 이진 분류
Project 04: 보스톤 주택 가격 회귀분석
Project 05: 손글씨 숫자 인식
Project 06: 사진속의 물체 인식
Project 07: 영화 리뷰를 사용한 감성(Sentiment) 예측

Giving up because TensorFlow is winning?

1knxd-voyr9chjhvpwnq5wa

이미지출처: medium

오늘 러스트(Rust) 언어로 작성된 오픈소스 머신러닝 라이브러리인 Leaf의 개발자가 개발 중단을 발표했습니다. 미디엄 사이트에 올라온 글을 참고해 보면 Leaf는 텐서플로우가 공개되기 조금 전인 작년 말부터 개발이 시작되었다고 합니다. 대략 6개월간 개발이 지속되어 왔지만 텐서플로우나 Keras 같은 툴들이 가지고 있는 커뮤니티나 자원을 넘어서기 힘들거라 생각하는 것 같습니다. 실제로 Keras 개발자는 구글에 입사해서 텐서플로우의 생태계 안으로 들어갔다고 볼 수 있습니다.

인터넷 커뮤니티 레딧에는 이로 인한 여러가지 의견이 분분합니다. 무엇보다도 구글과 같은 빅 컴퍼니 때문에 소프트웨어 개발이 중단된다는 것이 슬픈 일입니다. 그동안 Leaf를 쓰거나 지원해 왔던 러스트 커뮤니티도 실망이 클 것 같습니다. 한편에서는 개발자의 글을 참고했을 때 이 프로젝트는 벤처캐피탈에 의해 지원을 받고 있고 현재 실리콘밸리의 벤처캐피탈은 머신러닝 프레임워크보다는 머신러닝을 이용한 어플리케이션 개발에 더 관심이 있다는 것을 지적하고 있습니다. 이는 상당한 설득력이 있어 보입니다.

하지만 오픈소스라면 러스트 커뮤니티 안에서 다른 메인테이너를 구해볼 수 있지 않을까 하는 생각이 듭니다. 어쩌면 이런 현상은 구글이 텐서플로우를 공개하면서 노렸던 노림수가 아닐까요. 안드로이드가 아이폰을 제외한 모바일 전체 생태계를 통일한 후 그로부터 막대한 이익을 얻고 있습니다. 어떤 스타트업이 새 머신러닝 프레임워크를 만들려고 한다면 ‘텐서플로우 쓰면 되잖아. 왜 다른게 필요해?’ 라는 반문이 넘치지 않을까 걱정됩니다.

텐서플로우와 함께 다양한 대안이 함께 공존할 수 있기를 바랍니다.