태그 보관물: ConvnetJS

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

ConvNet with WebGL

record_resize

WebGL을 사용하여, 즉 브라우저에서 GPU 가속을 사용하여 콘볼루션 뉴럴 네트워크를 구현한 데모가 공개되었습니다. 이곳에서 파이어폭스나 크롬 브라우저로 직접 테스트해 보실 수 있습니다. 이 데모의 깃허브에 조금 자세한 설명이 들어 있습니다. MNIST 학습은 텐서플로우로 한 후에 파라메타들를 바이너리로 저장하여 자바스크립트에서 읽어들여 사용했습니다.

자바스크립트에서 콘볼루션 뉴럴 네트워크를 구현한 것으로 잘 알려진 것은 스탠포드의 안드레이 카패시(Andrej Karpathy)가 만든 ConvNetJS가 있습니다. 이 데모에서는 순수한 자바스크립트로만 구현한 것이 아니고 WebGL 래퍼인 regl 라이브러리를 사용하여 GPU 가속을 이용한 점이 돋보입니다. 다른 기술들이 그렇듯이 딥 러닝 분야도 브라우저를 통해 많이 응용될 수 있을 것 같습니다.

텐서플로우 Playground

tensorflow-playground

구글에서 뉴럴 네트워크 모델링을 브라우저에서 멋진 비주얼라이제이션을 통해 맛볼 수 있게 한 재미있는 사이트를 공개했습니다. 현재 알고리즘은 백프로파게이션(backpropagation)이 디폴트로 되어 있습니다. 좌측에 몇가지 테스트 데이터셋을 고를 수 있고 히든 레이어는 6개까지 추가시킬 수 있습니다. 각 레이어에 뉴런은 8개까지 늘릴 수 있습니다.

상단에는 러닝속도(learning rate)와 액티베이션(activation) 함수, 레귤러리제이션(regularization) 방식, 레귤러리제이션 정도를 선택할 수 있습니다. 액티베이션 함수는 하이퍼볼릭 탄젠트(tanh), 시그모이드(Sigmoid), 선형(Linear), 렐루(ReLU) 중 하나를 선택할 수 있고 레귤러리제이션은 L1, L2 중 하나를 선택할 수 있습니다. 분류(Classification)를 선택하면 4개의 데이터 셋이 있고 회귀분석(Regression)을 선택하면 2개의 데이터 셋 중 하나를 고를 수 있습니다.

오렌지, 블루 두가지의 데이터 종류를 구분합니다. 좌상단의 시작 버튼을 누르면 각 뉴런에서 어떤 종류의 데이터에 대한 가중치가 높아지는지를 시각적으로 확인하실 수 있습니다. 사실 이 프로그램은 텐서플로우를 이용한 것은 아니고 자바스크립트로 작성되어(정확히는 타입스크립트) 브라우저에서 실행됩니다.

자바스크립트에서 머신러닝을 수행하려는 시도가 많이 있습니다. 그 중에서도 가장 유명한 것은 ConvNetJS 입니다.