Deep Learning始めた

ここ数年の盛り上がり方から、流石にある程度知っておかないとまずいかなと漠然と思い始め、Deep Learningの勉強を始めてみた。

今年の4月頃からCourseraのDeep Learning Specialization 5コースを受講したり、ゼロから作る Deep Learningを読んで、とりあえず初めの一歩を踏み出した。途中、微分線形代数を思い出したり、数式の意味を理解するのに苦労した。

そして、7月頃にTensorFlowではじめるDeepLearning実装入門でTensorFlowに入門し、この本に載っているNeural Image Captioningを実装してみた。更に、これ自体単純なAIの例として面白いのでWebアプリ化してみたのが以下。

Neural Image Captioning

手持ちの画像をアップロードするとそれにキャプションを付けてくれるというもの。キャプション生成には10数秒ほど時間がかかります。

中身を簡単に説明すると、CNN(GoogLeNet Inception-v3)とRNN(ブロックにLSTMを使用)を繋げたモデルを、TensorFlowを使って実装している。そしてこのモデルをSTAIR Captionというデータセットを使って、AWSのp2.xlargeというGPUインスタンスで15時間ほど学習させた。

Webアプリとしては、Djangoを使って作成しておりニューラルネットワークでの推論処理は非同期実行にする為celeryというライブラリを使用した。

今回、TensorFlowを使ってWebアプリを作成するにあたり、あらゆることが初めての経験であった為、製作期間1ヶ月間はとても有意義な時間だった。

TensorFlowはもちろんのこと、そもそもPython自体書いたことがなかった為、パーフェクトPythonを参照しながらコーディングを進めた。また、Django公式チュートリアルBuilding Django 2.0 Web Applicationsを読んで使い方を覚え、PostgreSQLやNginxについても一から始めた。更に、AWSも初めて使ったり、元々契約していたVPSが不具合でyumのアップデートができなくて別のVPSを契約し直して一から構築し直したりと色々と大変だった。(ここが一番ハマった)

今後は、引き続きDeep Learningの知識を深めながら、TensorFlowだけでなくKerasも試してみようと考えている。あと、Kaggleにもチャレンジしてみたい。