読者です 読者をやめる 読者になる 読者になる

/home/by-natures/dev*

ソフトウェア開発者として働く人の技術的なメモ

アカデメイア ソフトウェア勉強会 #1 を実施しました

前職の方や異業種交流会で知り合った方と機械学習勉強会を運営していたのですが、今回はソフトウェア開発に特化させた勉強会を実施しました。

というのも、機械学習勉強会の参加者で「プログラミング自体を教えて欲しい」という方が多くいて、それならソフトウェア開発の方面で一度やってみようかと思い立ったのがきっかけです。機械学習勉強会の方はその方面に詳しい方も運営メンバーに加わってくれて、自然に回るようになってきました。私は機械学習の知識が浅いこともあって、自分の分野に近い方面で勉強会が開けないかなとも考えていたので、改めてソフトウェア系の勉強会を実施することにしました。

会社の人や運営メンバーとも話し合い、初回のテーマは「Git/GitHub の使い方」+「Java でのアプリケーション開発」という、ソフトウェア開発現場で使いそうな技術・ツールを一通り触れてもらうことにしました。

アカデメイア」という名前は、運営メンバーに 株式会社アカデメイア という会社を経営している方がいたので名前をお借りしました。機械学習勉強会の方は、機械学習系の修士・博士の方も多く参加しているので、なんとなくその系譜を汲んでいます。

改めて勉強会を立ち上げるとなると上手くいくか不安でしたが、運営メンバーが背中を押してくれたので無事開催することができました。実際に10名以上の方に来ていただいて、定刻になって参加者が集まってきたのを見たときはほっとしましたw

機械学習勉強会に寄せるのであれば Python を扱うべきかな〜とも思ったのですが、「最初なんだから好きなようにやったらいい」という周りの方も意見もあって、Java に振り切った内容にしました。運営メンバーに Ruby に詳しい方もいるので、次回はプログラミング言語から改めてどのような内容にできるかが楽しみです。

では時系列に沿って、どんな勉強会だったのかをお伝えします。

イベントページ

academeia-dev.connpass.com

続きを読む

機械学習勉強会 #10 (TensorFlow)

実施から時間が経ってしまったのですが、#9 に引き続き、先日 Google 社よりオープンソース化された TensorFlow という機械学習ライブラリを使った勉強会を2016年4月に実施しました。Google+ コミュニティや、前回の TensorFlow の勉強会の内容についてはこのブログの 第9回をご覧ください。

では勉強会の様子を簡単にお伝えします。

IMG_4623

続きを読む

機械学習勉強会 #9 (TensorFlow)

先日、約1年越しの機械学習勉強会を実施しました。今回のお題は、先日 Google 社よりオープンソース化された TensorFlow という機械学習ライブラリを実際に使ってみよう!というものです。

Google+ コミュニティや、前回の実施についてはこのブログの 第1回, 第2回, 第3回, 第4回, 第5回, 第6回 をご覧ください。全8回だったのですが、後半2回は記事にできていません、すみません…(^_^;

今回は TensorFlow を発表してくれる方に主催者として加わっていただきました。また、今回の勉強会の後に「運営に参加したい」という方が何名かいました。その方々を徐々に巻き込んで、今後も楽しい勉強会ができそうな予感がした #9 でした。

では勉強会の様子を簡単にお伝えします。

[toc]

14:00〜15:30 TensorFlow 導入

勉強会のはじめに、東京大学物性研究所に所属する小西さんから以下のような話がありました:

  • 機械学習とは何か
  • TensorFlow の概要・モデル
  • VirtualBox を利用して、MNIST サンプルの実行
  • 可視化ツール TensorBoard の紹介

TensorFlow は 2016年1月時点では Windows 環境に直接インストールする事はできず、Docker などを介する必要があります。今回は TensorFlow が準備された VirtualBox のイメージを用意したため、Windows ユーザーはこのイメージをセットアップして TensorFlow を動かしました。

MNIST とは 0〜9 の手書き文字の画像データベースで、機械学習の分野でよくサンプルデータとして見かけます。TensorFlow も MNIST を使った分類(Classification)をデモとして用意しているため、演習ではこれを動かし、数値を変えたりして結果がどのように変わるのかを見ました。

20160117-DSC_4965

15:30〜17:30 チーム作業(もくもく会

次にチーム分けを行い、約2時間ほどの作業時間を設けました。作業後は、どのようなことを行ったのか一人一人発表します。

チーム分けを行った理由は、時間も限られていたので共同作業は難しいかと思ったのですが、それでもスキルや興味が近い人同士が近い席になると、ディスカッションや知識の共有が行いやすいと考えたためです。

いわゆるもくもく会にした理由は、今回の勉強会の目的が「TensorFlow に触れてみよう!」ということだったので、最初に小西さんから TensorFlow の動かし方を共有があった後は、各自の興味の方向で調べてもらうことにしました。テーマを絞った「もくもく会」というイメージです。

20160117-DSC_4980

詳しい人が同じチームの方に教え合うチームもあれば…

20160117-DSC_4976_Fotor_Fotor 20160117-DSC_4988_Fotor_Fotor

自分のもっているプログラムや知識を共有し合うチームもありました。

 

個人的にはどうなるかなと不安はあったのですが、機械学習に詳しくない人でも、限られた時間に集中して調査することで得たものがあったと言っており、元より詳しい人はライブラリの使い方を更に具体的に調べたり、既存の別フレームワークで動いているものを TensorFlow へ置き換えていました。このように短い時間ではありましたが成果が出ていた人もおり、最後に全体で共有することで、参加者全体の理解を押し進めることができました。

後半の作業時間はとても集中している様子が伝わってきました。前半はそれぞれが知っていることを共有しあったりして活気づいていたのですが、後半は集中しているためか、まるで図書館にいるような気分でした(^_^; 「時間終了です」と告げると、会場が試験が終わった直後のような雰囲気に(笑)。仕事じゃないので気を抜いてください、と言ったらみんな笑っていました。

17:30〜18:30 成果発表

20160117-DSC_4997_Fotor

集中して作業した後は、一人一人がどのようなことをしたのかを発表しました。

多くの方は「使い方を調べていた」「講義の時間に使ったプログラムの意味を調べていた」など、調べもので終わっていましたが、個人的にはそれで少しでも理解が深まったなら勉強会に参加した意味はあるかな、と思っています。この勉強会は、これから機械学習なり TensorFlow なりを学んで行くための「きっかけ」を提供することを目的にしていたので、数時間でも(半強制的に?)調べ物をする時間が得られるのは有意義だと思うんです。最初は1人だとどこから手をつけたらいいか分かりませんしね。

中にはプロジェクターを使って、どんなことをしたのか報告してくれた方もいました。上の写真は、発表者が持っていた既存のプログラムを TensorFlow へ移植し、それを TensorBoard で見ているところです。

TensorFlow でマンデルブロー集合を描く

僕も運営しつつ参加したのですが、個人的には機械学習の前に TensorFlow というフレームワーク自体に興味があって、フレームワークが理解できそうな簡単なサンプルから動かそうと思い、マンデルブロー集合を描くサンプル を動かしてみました。

動くとこんな図が出てきます:

mandelbrot

気持ち悪いですね(笑)。黒いところがマンデルブロー集合、色の濃度は発散速度です。マンデルブロー集合の定義については Wikipedia などを見てほしいのですが、基本的には数列計算を行うだけなので、フレームワークの理解にはよいかと思います。Google"Visualizing the Mandelbrot set doesn't have anything to do with machine learning, but it makes for a fun example of how one can use TensorFlow for general mathematics." と言っており、簡単で楽しいサンプルです。

TensorFlow は Python3 にも対応しているのですが、マンデルブロー集合を描くサンプル は Python2系 を対象にしたソースコードとなっており、僕がインストールした TensorFlow は Python3系だったので、Python3 系でも動くように直したものを GitHub に置いています。といっても修正はほんの少しで、ライブラリの関係で動かなかった I/O の所を直したり、元々のサンプルは Jupitor というか、IPython Notebook を使っているのですが、画像を出したいだけだったので直接書き出しました。

余談ですが、TensorFlow が Python3 に対応したのは2015年末(11月?)のようで、ライブラリやらサンプルが動かないことが多いので、当面は Python2 で動かした方がいいかもしれません。このブログ用に TensorBoard を動かそうと思ったのですが、簡単には動かなそうです。。(公式では TensorBoard も Python3 をサポート、と言っているのですが…)

それはさておき、本質的な計算は Python2 でも 3 でも変わりません:

# グリッドの作成
Y, X = np.mgrid[-1.3:1.3:0.005, -2:1:0.005]
Z = X+1j*Y

# 定数、変数の設定
xs = tf.constant(Z.astype("complex64"))
zs = tf.Variable(xs)
ns = tf.Variable(tf.zeros_like(xs, "float32"))

# 変数の初期化
tf.initialize_all_variables().run()

# computation graph の作成
zs_ = zs*zs + xs
not_diverged = tf.complex_abs(zs_) < 4
step = tf.group(
  zs.assign(zs_),
  ns.assign_add(tf.cast(not_diverged, "float32"))
)

# 数列を第200位まで計算
for i in range(200):
  step.run()

22, 23行目が実際に計算を行う命令で、その前までは計算の設定、TensorFlow の言葉で言えば computation graph を作成している部分です。マンデルブロー集合の本質は14行目だけですね。15行目は発散判定を、絶対値が4を超えるかどうかで判断している部分です。boolean が not_diverged に設定されそうですが、実際は zs_ を引数にとる計算ノードになります。

ns が少し妙ですが、これは発散速度を計測する変数です。not_diverged の条件を、数列を200位まで計算するうちに何回満たすかを数え上げており、最終的にはそれを色で表して画像にしています。

Python3 で動かすのに少し苦労しましたが、デバッグ中に TensorFlow の変数やメソッドも眺めたので、基本的な動作原理を理解することができました。

懇親会

20160117-DSC_5028_Fotor

懇親会は、主催者の一人である十五(とうご)さんが主催される異業種交流会と合同で実施しました。学生の方が多かったので研究の話が多かった印象ですが、自己紹介の中で共通の話題が見つかるといっきに盛り上がったりして、そのテンションに付いて行けたり行けなかったり…(笑) 異業種交流会は本当にいろんな業界の方が来るので収拾がつけられない楽しい飲み会になります。

この機械学習勉強会の懇親会ですが、主催者という立場もあるのか、いつも何となく不思議な気分になるんです。アカデミックな世界からビジネスの世界へ出て行く学生さんと交流を持つことで、懐かしかったり、変なアドバイスをしてしまったり、俺は昔どんな気持ちだったかなぁと思いを馳せたり…。あと前職の後輩もいたので、懐かしい話もたくさんしましたね。この勉強会の主催者の方々もそうですが、どこかで知り合って、こうやってまたどこかで話しができる人がいるのはそれだけで楽しいことだなぁと感じます。

 

次回は3月ごろ?を一応予定しています。Google+ コミュニティ などでも告知しますので、ご興味あるかたはお気軽にご連絡ください!

サーバ側からクッキーの有効期限は取得できない

Stackoverflow を眺めていたら、こんな Question がありました:

How to get cookie's expire time

Flask - How to get a cookie expiration time?

PHP / Python(つまりサーバ側)からクッキーの Expiration time を取得したい、というものです。

結論としては、クライアントはサーバへ Expiration time を送らないため、サーバ側からは取得できないようです。Expiration time 自体を別のクッキーの値に保存するとか代替手段はあるようですが、そんなことせずにアプリケーション実装できるのがよさそうですね…

Cookie に関する RFC, RFC2965RFC 6265 を読んでみたのですが、こちらには上の内容は含まれていないようでした。しかし Microsoft の ASP.NET でのクッキーの扱いのページ に、こんな記述があります:

Changing a Cookie's Expiration Date The browser is responsible for managing cookies, and the cookie's expiration time and date help the browser manage its store of cookies. Therefore, although you can read the name and value of a cookie, you cannot read the cookie's expiration date and time. When the browser sends cookie information to the server, the browser does not include the expiration information. (The cookie's Expires property always returns a date-time value of zero.) If you are concerned about the expiration date of a cookie, you must reset it, which is covered in the "Modifying and Deleting Cookies" section.
(和訳) クッキーの有効期限の変更 ブラウザはクッキーの管理に責任を負うため、クッキーの有効期限はブラウザがクッキーの保存を管理するサポートをします。つまり、クッキーの名前や値を読むことが出来ても、その有効期限は読むことは出来ません。ブラウザがクッキーの情報をサーバへ送る際も、有効期限の情報は含まれません。もしクッキーの有効期限に関心がある場合、クッキーを一度リセットする必要があります(詳しくは "modifying and Deletting Cookies" のセクションを参照のこと)

ちょっと勉強になったのでメモでした。

Google の機械学習ライブラリ TensorFlow メモ

2016年に知り合いの方が TensorFlow の勉強会を開くということで、運営のサポートをすることになりました。設営だけでなく、Python などの言語的なサポートも行うことになったため、この年末年始に勉強しています。

TensorFlow(Google の公式ページ) とは Google機械学習オープンソースライブラリで、多次元ベクトル(=テンソル)をデータフローによって制御する仕組みから、TensorFlow と名付けたようです。

チュートリアルの時点から数式やデータフローの図が多く出て来るため、このコマンドを打てば何か出て来るといったライブラリではなく、有識者機械学習業務・研究をサポートするツールであるようです。Google がなぜ TensorFlow をオープンソース化したかについて、

Research in this area is global and growing fast, but lacks standard tools. By sharing what we believe to be one of the best machine learning toolboxes in the world, we hope to create an open standard for exchanging research ideas and putting machine learning in products. -- Google の公式ページ より

と書かれています。"for exchanging research ideas and putting machine learning in products." という文で明確に research という言葉が出て来ており、機械学習に詳しい人にとってのライブラリというのが主な位置づけのような気がします。

まだインストールして動作確認しただけですが、この後はチュートリアルをもう少し進めてみたり、実際のデータで使ってみようと思います(余談ですが、最近ブログを書いていなかったので、簡単なエントリーからでも書く癖を戻したいなと思っています…)。しかし色々な会社や団体から機械学習ライブラリが登場してきて、どれが多勢になるのか来年は分かれ目かもしれませんね。

インストール

インストールは Python 2.7 もしくは 3.3 以上であれば、pip から一発で入ります(詳しいインストール手順は "Download and Setup" をどうぞ)

僕の場合は macbrew で Python3.4 を入れ、その後 pip でインストールしました:

sudo pip3 install --upgrade https://storage.googleapis.com/tensorflow/mac/tensorflow-0.6.0-py3-none-any.whl
動作確認1:ライブラリが使えるかどうか

ここはすんなり動きました。

$ python3
Python 3.4.1 (default, Dec 29 2015, 14:51:03) 
[GCC 4.2.1 Compatible Apple LLVM 5.1 (clang-503.0.40)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
I tensorflow/core/common_runtime/local_device.cc:40] Local device intra op parallelism threads: 4
I tensorflow/core/common_runtime/direct_session.cc:58] Direct session inter op parallelism threads: 4
>>> print(sess.run(hello))
b'Hello, TensorFlow!'
>>> a = tf.constant(10)
>>> b = tf.constant(32)
>>> print(sess.run(a + b))
42
動作確認2:MNIST のデータの学習

まだよく分かりませんが、動いているようです。結構時間が掛かります。

$ python3 /usr/local/lib/python3.4/site-packages/tensorflow/models/image/mnist/convolutional.py
Succesfully downloaded train-images-idx3-ubyte.gz 9912422 bytes.
Succesfully downloaded train-labels-idx1-ubyte.gz 28881 bytes.
Succesfully downloaded t10k-images-idx3-ubyte.gz 1648877 bytes.
Succesfully downloaded t10k-labels-idx1-ubyte.gz 4542 bytes.
Extracting data/train-images-idx3-ubyte.gz
Extracting data/train-labels-idx1-ubyte.gz
Extracting data/t10k-images-idx3-ubyte.gz
Extracting data/t10k-labels-idx1-ubyte.gz
I tensorflow/core/common_runtime/local_device.cc:40] Local device intra op parallelism threads: 4
I tensorflow/core/common_runtime/direct_session.cc:58] Direct session inter op parallelism threads: 4
Initialized!
Epoch 0.00
Minibatch loss: 12.054, learning rate: 0.010000
Minibatch error: 90.6%
Validation error: 84.6%
Epoch 0.12
...

機械学習勉強会 #6 セミナー参加者募集中!(11/22(Sat))

私も運営メンバーに加わっている「機械学習勉強会」の第6回ですが、セミナー参加者を募集しています!

機械学習勉強会」は、機械学習について学ぶきっかけをつくってもらうことが目的の勉強会です。また、社外の人とコミュニケーションを図ることで、みなさんの業務のモチベーションアップに繋がればと考えています。社外の人とコミュニケーションを取ることで、会社内で閉じていた情報を交換し合ったり、様々なバックグラウンドをもつ方と話をすることで、気付きを得ることがこの勉強会のもう一つの目的です。

第1回, 第2回, 第3回, 第4回, 第5回 の様子もぜひご覧ください。

そんな機械学習勉強会の第6回は、チーム作業とセミナーの2つのパートに分かれています。チーム作業は、スキルや学びたいことごとにチームに分かれて2015年1月末まで定期的に集まって作業する継続的な取り組みですが、残り回数が少ないこともあり、今回はセミナーパートのみ参加する参加者を一般募集させていただきます。

機械学習勉強会 #6 セミナー概要

日時

2014年11月22日(土)16:00〜18:00

  • 13:00 からチーム作業を行っており、その後の実施予定です。

  • 18:30 から同会場で懇親会も予定しております!こちらもご都合付きましたら、ぜひご参加くださいませ。

開催場所

株式会社 構造計画研究所

(詳しくは下記リンクでご確認ください)

セミナー内容

各30分+質疑応答15分を予定しております。

国立情報学研究所 高木様 (多様な音声とその合成 )
富士通総研 福島様 (発表内容調整中、「Rによるハイパフォーマンスコンピューティング」の著者)

参考: Rによるハイパフォーマンスコンピューティング

申し込み方法

下記 Google フォームのアンケートへご回答ください:

https://docs.google.com/forms/d/1tIxmDHsnbH8Czcx5q5CM3cqxFbhIctD_2BBfwgSVsX8/edit

 

ご不明点あれば、遠慮なくお問い合わせくださいませ!

どうぞよろしくお願いいたします。

@tendon0

memo: MapR 4.0.1

aboutus

MapR セミナーのメモを備忘録代わりに残します。間違ってたらご指摘ください。

Drill も MapR-DB(より使いやすいHBase) も MapR なら利用可能ということで、Drill が AWS で利用可能になるのでしょうか…。そう思うと非常に期待が高まります。S3 になんでもかんでも置いておいて、あとは Drill でどうにかするよという世界でしょうか。Presto でもいいですね。imaifactory さんが、一番好きな AWS サービスは S3 だと言っていましたが、日ごとにその言葉の意味が分かる今日この頃です。

参考:v4.0.1 リリースノート

[追記] Drill は Amazon EMR のブートストラップアクションで用意があり、現在でも簡単に利用することが可能だと MapR の方に教えていただきました。GitHubリポジトリを見ると elasticsearch や Presto も用意があるので、簡単に環境を整えられそうです。 github: awslabs/emr-bootstrap-actions

続きを読む