2016年1月24日日曜日

Google App EngineでChainerを動かそうとして諦めた時のメモ

表題どおり、Google App EngineでChainerを動かしてみようと思ったが、上手くいかなかった。
そのときのメモを書いておく。


1. numpyのバージョン

GAEはデフォルトでnumpyが用意されているが、これのバージョンは1.6.1
しかしChainerでは1.9,1.10が前提のようなので、これは使えない。

実際に、1.6.1のまま動かそうとすると、numpyのfull関数がないとかでエラーが出た。
githubのソースを見る限り、1.6.1では確かにfullはない様子。

そのため、自前のライブラリとしてnumpyの1.10を用意し、GAEにデプロイする。

2. 自前ライブラリのデプロイ


デプロイ対象のアプリケーションのルート直下にlibという名称のファイルを用意する。
そのlib以下にnumpyをインストールする。

$ pip install -t lib numpy

chainerとchinerが必要とするh5pyもついでにインストールする

$ pip install -t lib h5py


$ pip install -t lib chainer



そして、同じくルート直下にappengine_config.pyという名称のファイルを作成し、下記の内容を記載する。

from google.appengine.ext import vendor
# Add any libraries installed in the "lib" folder.
vendor.add('lib')

3. SDKで実行
SDKで実行したところ、下記のエラーが出た。


  File "<app path>\lib\numpy\core\__init__.py", line 14, in <module>
    from . import multiarray
ImportError: cannot import name multiarray

multiarrayというモジュールがないとのこと。
ディレクトリを見てみるとmultiarrayはsoファイルでできたモジュールだった。

Google App EngineのドキュメントにははっきりとC extensionがだめと書いてあるので、おそらくこいつは動かないのだろう。

You can add any third-party library to your application, as long as it is implemented in "pure Python" (no C extensions) and otherwise functions in the App Engine runtime environment. The easiest way to manage this is with a ./lib directory.

ということでここで諦めた。
pythonのバージョンも2.7だし、やっぱグーグルさん的にはもうGoogle App Engineに力入れる気ないのかなあ。

2016年1月4日月曜日

英辞郎の単語帳をKindleみたいなフラッシュカードにするChrome拡張公開

スペースアルクの英辞郎の単語帳をKindleのフラッシュカードのように使ってみたくなり、Chrome拡張を作ってみました。



InstallはChrome Web Storeのこちらから。
アイコンを押すと、単語帳からデータの取得し、ランダムな順序で単語を表示します。
はじめは単語しか表示されてませんが、クリックすると辞書を引いたときの定義が表示されます。



Undermineをクリックすると..


辞書の中身が表示されます。

右上のnextを押すと次の単語へ、previousを押すと一個前の単語へ。
単語を覚えたら「単語帳から削除する」をクリックして削除できます。


前提条件
  • 英辞郎on The web Pro(有料)のアカウントを持っている必要があります。
  • また拡張を起動する前にあらかじめログインをしておいてください。

2015年12月27日日曜日

SVN(Support Vector Machine)を調べたときに役立ったサイトメモ

Support Vector Machineの原理を調べてるときに役立ったサイトを張っておく。

一昔前に一世を風靡した手法だが、まじめにロジックを追うと数学的な知見が結構使用されていた。

どれか一個を見れば、完璧!見たいのは残念ながらなかったが私の場合は下記のサイトをいったりきたりしながら読み込んでいったら大体理解できた。

もちろん、これ以外のサイトも多数見たが、よくわからなかったり、明らかに間違ってたりといった質的にいまいちなサイトも多くあったことを記しておく。


名古屋大学の人が書いた説明
短くまとめられているので、全体像を把握するのに役立った。
付録として掲載されているKKT法の例も有益。

静岡理工大の人が書いた資料
一般的なSVNでは多次元を前提として説明されているので、数式が若干追いづらい。
このサイトでは、入力が2次元であることを前提に説明しているので、論理展開がわかりやすい。
数学的厳密性は気にしてなかったので非常に重宝した。

個人的には、2次元で説明しているために、マージンの距離の求め方が、単に点と直線の距離の距離の公式を使って求めているに過ぎないことがわかり、これのおかげでつまづきが解消された。マージンの距離については、必ずしもそういう説明をしてくれないサイトも多かったんだよね。

産業技術総合研究所の人が書いた資料
一番教科書的に使える資料。ただし、式の展開などはわかっていることが前提でさっくり飛ばしているので、初学には向かない。俗に言うインデックスとして資料するのにお薦めな資料。

海洋大学の人の書いた資料
KKT方について調べるのに役立った。

2015年12月23日水曜日

Deep Learning用のモデルを簡単に作成できるLabellioを使ってみた

本記事は Deep Learning Advent Calendar 2015 22日目の記事です。
AlpacaがリリースしているDeep LeaningのWebサービスにLabellioというのがあります。これを使うと、画像データを与えるだけで、自動的にDeep Learningで学習を行いモデルを作成することができます。モデルはもちろんエクスポート可能であり、著名なDeep LearningフレームワークのひとつであるCaffeに対応した形式でエクスポートすることができます。

学習はすべてLabellioの用意するリソース上で行われるので、自前で用意するのは訓練用の画像データとそのラベルだけでよいという優れものです。
訓練データは自前で用意したものをUploadすることもできますし、とりあえず試したいのであればLabellioが提供するAPIを利用してFlickr/Bingから訓練データを自動的に取得させることもできます。

今回は、Flickrから取得したデータを使ってみました。例としてフルーツの画像分類器を作成してみます。

まずモデル名として"Fruits"と指定します。
そして訓練データをFlickr上から取得するように指定します。

SourceとしてFlickrを指定。
LabelにOrange, Apple, Bananaを入力する。



ラベルの入力が終わったらAddを押す。





ここでNextを押すと学習用の処理がLabellioにenqueueされる。



後はTrainingが終わるのを待つ。
今回の場合は150個程度の訓練データしか使ってないようなので、数分程度で学習が終了した。


学習が終わった後、適当にGoogleで見つけたバナナの画像をこの分類器に与えてみる。




結果が出るまで少し待つ




それ程時間がかからずに結果が出る。
バナナな確率0.6。思ってたより数値が良くないのは訓練データが少ないせいだろうか。
そういえば訓練結果のAccuracyも0.57だった。

もう少しいろいろデータを用意して試してみたいところだ。

使ってみた感触


もはや画像データを渡せばいいだけなので、Deep Learningが何なのかといった知識がまったく不要である。また学習のリソースごと提供してくれているのが非常にポイントが高い。フレームワークはオープンソースで無料なのがいくつも存在するが、学習用のリソースはそうはいかない。

営利目的でしっかりとしたものを作るのならともかく、単に学習を目的としていたり、趣味でちょこっと作りたいときなど、学習リソースの調達はネックになることが多いであろう。

そのなかで学習環境もセットで提供されているLabellioは非常に存在価値が高いといえる。


2015年12月20日日曜日

Courseraの講義資料をダウンロードする方法

Couseraで人気のAndrew Ng氏によるMachine Learningの講義資料をダウンロードする方法のメモ。

なお、このスクリプトはCousera全般に対応しているので基本的にはどれも落とせる様子(未検証)

前提条件

講義資料への正しいアクセス権を持っていること。
つまり、普通にブラウザ経由で講義を見れている人が、オフラインで見たいなどのケースを想定。アカウント持ってないけど、資料を見たいという人は、無料なのでまずアカウントを作ってください。

準備

cousera-dlをインストール。
%> pip3 install coursera
詳細はcousera-dlを見てください。

ダウンロード

%> cousera-dl -u <username> -p <password>  ml-005

usernameとpasswordは、couseraにログインするときに使う、メールアドレスとパスワード。
ml-005はAndrew Ng氏のMachine Learningの識別子。

後はスクリプトが終わるまで待つ。
私の環境では10-20分程度は時間がかかった。

2015年11月17日火曜日

[Octave] broadcasting

Octaveにはbroadcastingという概念があるらしい。

これは例で言うと、下記のような演算ができるようになるもの

>A = [ 1 2 3; 4 5 6; 7 8 9]
>B = [1]
>C=  [ 10 20 30]
>bsxfun(@plus,A,B)
[2 3 4; 5 6 7; 8 9 10]
全部の要素に1が足されている 
 
>bsxfun(@plus,A,C)
[11 22 33; 14 25 26; 17 28 39]
一行目には10、二行目には20、三行目には30が足されている。

ちなみに、bsxfun関数を使わなくとも、A + BやA + Cをやっても同じ結果が返される。デフォルトで有効になっているということだろうか。(後で調べる)

OctaveやNumpyではbroadcastingと呼んでいるが、Matlabではbinary singleton expansion、Rではsingle instruction multiple dataとかreplicationと呼ばれたりするらしい。
A note on terminology: “broadcasting” is the term popularized by the Numpy numerical environment in the Python programming language. In other programming languages and environments, broadcasting may also be known as binary singleton expansion (BSX, in MATLAB, and the origin of the name of the bsxfun function), recycling (R programming language), single-instruction multiple data (SIMD), orreplication. 
 
GNU Octave 19.2 broadcasting
Mathworks bsxfun

単純に行列演算してる分にはとっつきやすい印象があったOctaveだが、ちょっと突っ込んで使い始めると意外にぱっと見わかりにくい機能が多い

2015年10月16日金曜日

[読書感想文]エンジニアとして世界の最前線で働く選択肢 ~渡米・面接・転職・キャリアアップ・レイオフ対策までの実践ガイド



本書のような自分のキャリアを振り返った本を読む場合、何よりも気になるのは著者の経歴である。中には職歴が2年程度しかないのに、FacebookやGoogleのような有名企業に入ったというだけで、本の出版に至ってしまうような人も昨今少なからず見受けられる。そのような本を購入した時のがっかり感はなんとも言えない。

著者の名前で軽く検索をかけてみると、そんなことはないようだ。
新卒として日本HPに入社し、駐在員としての米国勤務を経た後、AmazonやMicrosoftなどの企業を渡りあるいているようだ。

仕事以外でも、「シアトル界隈のIT関係者が集まって勉強会や講演会などを行う非営利団体シアトルITジャパニーズプロフェッショナルズ(SIJP)の副会長」として精力的に活動されているようであり、少なくとも充分に耳を傾けてみたい経験をお持ちのように見えた。

ちなみに下記のWebサイトが面白かった。購入を迷ってる人はぜひとも読んで欲しいし、読んでしまった人でもまた違うエピソードが紹介されてたりするのでまた違った楽しみを味わえる。


Story of My Life 竜 盛博さん

シリコンバレーで管理職になる道


さて、かなり期待感を膨らませて本を読み始めたが、期待は決して裏切られなかった。
副題の通り、採用、面接、レイオフについて、客観的な情報に、自身が経験した主観を匠に織り交ぜており、一気に読み進めてしまった。採用や面接の情報は筆者自身が採用の経験が豊富であることもあり、非常に高価値な情報が満載である。

いくつか心に残ったことをメモしておく。


  • キャリアは運に大きく左右される。

これは私もしみじみと実感していることである。私も海外赴任に手を上げて、どう選ばれるかも不明なプロセスを何年も待ち続けたことがある。成果を出せばいいという簡単なものでもなく、その時の募集状況やプロジェクトの予算など自分の努力ではどうしようもない要因に悩まされた。


  • レイオフは避けられないので、されてもすぐ転職できるように日頃から準備するしかない。

私はまだレイオフを経験したことがない。しかしこれは真理なのだろう。心に止めておかないと行けない


  • 35歳プログラマ定年説のないアメリカでも、50歳を超えると転職は難しい

50歳になって米国で職が見つからない場合、日本での求職はもっと絶望的だろう。米国で働き続けるのならば、これが最大のリスクといえるかもしれない。


本書は、「はじめに」に筆者がいうように、米国でソフトウェアエンジニアで働くことの美点しか強調されない昨今の風潮に違和感を感じメリットとともにデメリットも知ってほしいという思いで書かれている。一貫して中立した立場で書かれており、非常に読んでて安心できる。どうするべきかなど安易な結論を書いたりせず、また、筆者自身もまだ悩み続けている様子が描写されており、同じく米国で働く身として大きな親近感を抱いた。



米国で働きたいと考える人には必読といえる一冊である。