pylearn2 メモ
Pylearn2とは
Welcome — Pylearn2 dev documentation
Pylearn2 is still undergoing rapid development. Don’t expect a clean road without bumps!
まだ開発中のライブラリとのこと。
手法
ニューラルネットワークの課題
- 誤差情報が伝播されない
- 収束が遅い
- 局所解に陥る
- オーバーフィッティング
PyLearn2
- Theano 行列、数値計算 Cのコードを自動でつくる CUDA->GPU利用も自動化
- Numpy とか Scipy とか
- Yoshua Bengio先生の研究室
- LISAラボ
- Theanoの自動微分が優秀
- TheanoはGPUコード自動生成も
環境構築
必要なパッケージが多い。
NumPyはaptで入れたほうがいい、などの制約があるらしい。
Vagrant box
楽な環境構築方法としてはvagrantのべアボーンを使うのが良さそう。
pylearn2 入門したい編 - laughingのブログ
Theano
Pylearn2のベースになっている。導関数を解析的に導出してくれる(自動微分)。
GPU用のコードも出せる。
参考スライド
Theano動作例
# vi theano.py from theano import function, pp from theano.tensor.nnet import sigmoid import theano.tensor as T # sample 1 x = T.dscalar('x') y = x ** 2 df = T.grad(y, x) f = function([x], df) print "sample1: ", pp(f.maker.fgraph.outputs[0]) # sample 2 y = sigmoid(x) df = T.grad(y, x) f = function([x], df) print "sample2: ", pp(f.maker.fgraph.outputs[0]) # sample 3 w = T.dscalar('w') y = sigmoid(T.dot(x, w)) df = T.grad(y, x) f = function([x,w], df) print "sample3: ", pp(f.maker.fgraph.outputs[0])
# python theano.py sample1: (TensorConstant{2.0} * x) sample2: Elemwise{Composite{[Composite{[mul(i0, sub(i1, i0))]}(scalar_sigmoid(i0), i1)]}}(x, TensorConstant{1.0}) sample3: Elemwise{Composite{[Composite{[mul(i0, sub(i1, i0), i2)]}(Composite{[scalar_sigmoid(mul(i0, i1))]}(i0, i1), i2, i1)]}}(x, w, TensorConstant{1.0})
CIFER-10のチュートリアル
CIFERのデータセット
CIFAR-10 and CIFAR-100 datasets
The CIFAR-10 dataset consists of 60000 32x32 colour images in 10 classes, with 6000 images per class. There are 50000 training images and 10000 test images.
本来のCIFAR10の入力データ次元数は3x32x32。Pylearn2のgrbm_smdでは、make_dataset.pyのpreprocessing.ExtractPatches(patch_shape=(8, 8)で縮小しているらしい。
縮小してるのでなく、パッチをつくっている。
$ cd ~/pylearn2/pylearn2/scripts/tutorials/grbm_smd $ python make_dataset.py (実行済み) $ train.py cifar_grbm_smd.yaml # 学習 (2分ほどかかる) $ show_weights.py --out=weights.png cifar_grbm_smd.pkl $ print_monitor.py cifar_grbm_smd.pkl
YAMLファイルに学習方法(dataset,model,algorithm)を記述する。学習結果はpklに出力される。(pklとはpythonオブジェクトをシリアライズしたもの。)
cifar_grbm_smd.yaml
とくに重要な部分は下記。
dataset: !pkl: "cifar10_preprocessed_train.pkl",
model: !obj:pylearn2.models.rbm.GaussianBinaryRBM { # The RBM needs 192 visible units (its inputs are 8x8 patches with 3 # color channels) nvis : 192, # Num of visible 可視層のニューロン数 # We'll use 400 hidden units for this RBM. That's a small number but we # want this example script to train quickly. nhid : 10, # 隠れ層のユニット数
algorithm: !obj:pylearn2.training_algorithms.sgd.SGD { # The learning rate determines how big of steps the learning algorithm # takes. Here we use fairly big steps initially because we have a # learning rate adjustment scheme that will scale them down if # necessary. learning_rate : 1e-1, # 学習率 # Each gradient step will be based on this many examples batch_size : 5, # バッチサイズ
基本的な使い方
MNIST
MNIST handwritten digit database, Yann LeCun, Corinna Cortes and Chris Burges
手書きの数字データ。
$ cd ~/pylearn2/pylearn2/scripts/datasets $ python download_mnist.py (実行済み) $ cd ~/pylearn2/pylearn2/scripts/tutorials/stacked_autoencoders/tests $ python test_dae.py
Maxout
MNIST,cifAR で実行できるようになってる。
活性化関数を学習する。
$ cd ~/pylearn2/pylearn2/scripts/papers/maxout $ train.py mnist_pi.yaml $ train.py mnist_pi_continue.yaml
Dropout
ランダムに隠れ層を使えないような状態にして学習する。
欠損データがあってもロバスとに学習できるようにする。
まとめ
pre-trainingよりlearning Rate, Batch size, Epoch数、Hiddenレイヤーのユニット数が影響大きい。
Pre-Trainingは最後の寄り切りに近い。
- libsvm等にくらべて敷居が高い。
- 自分のデータで実行するためにはpythonでラッパを書く必要がある。
- ライブラリとして未完,カスタマイズが必要
- 汎用データ形式に対応していない
- 学習過程がわかりにくい
- 学習と検証はわけたい
新しいデータを適用したい場合
基本:pylearn2/pylearn2/datasetsにクラスを追加
汎用っぽいのもある
Matlab 不明 matlab_dataset.py
たとえばlibsvm形式を汎用でつかえるようにするとか
そもそもYAML定義や Pythonコードが面倒
自分でスクリプトを作って楽にする、とか。
Pylearn は Theano をベースとしている。
SdA DBN Maxout
GPU対応
ライブラリとして未完
ハックが必要
vagrantによる環境構築について
virtualbox+vagrant
pylearnの入ったubuntuのvm(precise64)がある。
pylearn2 入門したい編 - laughingのブログ
vagrant up で動かせた。プロビジョニングでPuppetを使っている。
twitterアイコン画像で試したひとのブログ
pylearn2 入門したい編 - laughingのブログ
チュートリアルにもあるgrbmを使って学習している。
bayon
文書のカテゴライズ
本来はクラスタリングツールだが文書カテゴライズもできる。
https://code.google.com/p/bayon/wiki/Tutorial_ja#ドキュメントに類似するクラスタの特定
まずクラスタリングを行う。 その際centroid.tsvにクラスタの中心ベクトルを保存しておく。
% bayon -c centroid.tsv -n 100 --clvector-size 100000 input.tsv > cluster.tsv --clvector-size で 中心ベクトルの要素数を指定する。デフォルトは50。
クラスタの中心ベクトルとドキュメントのベクトルを比較する。
% bayon -C centroid.tsv input.tsv > classify.tsv
iOS開発環境
iOS7+Xcode5.1.1で実機で動作するところまで設定した
Xcode5時代の「かんたん」iOSアプリ開発セットアップ - Qiita
iOSアプリをiPhone実機で動かす (3): 黄昏てなんかいられない
Romo
エデュケーションロボット Romo
Romo - The Programmable, Telepresence Robot Toy for Kids and Adults
Romo(ロモ)公式サイト‐体感型エデュケーショナルロボット‐
Romo(ロモ)はiPhoneなどで動く「体感型のエデュケーショナルロボット」で、誰でも動かすことが可能です。iPhoneアプリが頭脳の役割になり、様々な感情や動きを表現することができます。楽しみながら子どもの論理的思考や想像力、思考力を育むことができ、遊びや学びの幅がさらにひろがる可能性を秘めています。
Node.js をCentOSにインストール
gitをインストール
yum -y install git
プロキシの設定
git config --global http.proxy http://proxy.mycompany.com:8080 git config --global https.proxy http://proxy.example.com:8080
が、git clone でエラーになる。ソースから入れた。
GETA3インストールメモ
汎用連想計算エンジン GETA
GETA3をインストールしてみた。GETA2から、apiやコマンドの仕様が変更されているようだ。
GETA - Sunsept
インストール
INSTALL.txtに動かし方が書いてある。
wget http://geta.ex.nii.ac.jp/release/geta32u-release.tar.gz tar zxvf geta32u-release.tar.gz cd geta32u CFLAGS="-fPIC -g -Wall" ./configure --prefix=$GETAROOT --with-dlcsche make includes make >make.log 2>&1 make install
インデックス作成
$GETAROOT/sbin/mkdw -v0size 10000 -sched-conf $GETAROOT/etc/sched.conf $GETAROOT test test.wam 1.1.l
GETA2だとmkwというコマンドだったが、GETA3だとmkdwを使う。このコマンドでインデックスは一応作成できた。
スケジュール指定のあたりはよくわからない。また、-v0sizeを指定いないとエラーになった。
ダンプ
dumpdw test DCW_ROW dumpdw GENE DCW_COL
ダンプに使うコマンドが違う。GETA2ではdumpwamだったがGETA3ではdumpdw。
GETA2 インストールから動作までのメモ
単一CPU用のGETA2版と複数CPU対応のGETA3版がある。GETA2の動かし方をメモ。
インストール
wget http://geta.ex.nii.ac.jp/getaN2002/release/geta2_200102.tgz tar zxvf getabench_200202.tgz cd geta2 ./configure
ここで、CentOS6.5だとmakeがエラーになった。ソースを2箇所変更すると通る。
lib/srvmu/srvmu.h
58行目の size_t strnlen(const char *, int); をコメントアウトする。
testsuit/tst.c
testsuit/tst.c の varargs.h を stdarg.h に変更
patchを作成しておく
diff -crN geta2 geta2_modify > geta2.patch patch -p0 < geta2.patch
Perlモジュールのインストール
cpanが入ってなかったら入れる。
yum install cpan -y
getaモジュールをインストール
cd geta2/ext/wam/ perl Makefile.PL make make install
インデックス作成とテスト
インデックス作成
sudo vi $GETAROOT/etc/ci.conf handle: test # 注意:handle:の後には半角スペースを入れること。 # 注意:行末に不要なスペースを入れないこと。 handle=test sudo mkdir -p $GETAROOT/data/$handle sudo $GETAROOT/sbin/mkw $handle ./freqfile
freqfileの形式
@Ra 3 Ci 2 Ciii 1 Civ @Rb 1 Cii 5 Ciii @Rc 4 Ciii 3 Civ
dumpwamでダンプ
$GETAROOT/bin/dumpwam $handle cw_row $GETAROOT/bin/dumpwam $handle cw_col $GETAROOT/bin/dumpwam $handle xr_row $GETAROOT/bin/dumpwam $handle xr_col $GETAROOT/bin/dumpwam $handle cw_row 1 $GETAROOT/bin/dumpwam $handle xr_col 2