NIPS のヤバいプロモーションビデオ
音を出して観るべき。
Python の処理系
- Pysco
- Pyjion
- Nuitka
- Skulpt
Chainerを明示的にCUDA無しを指定してインストールする
python setup.py --cupy-no-cuda install
https://github.com/pfnet/cupy/blob/master/cupy_setup_build.py#L211github.com
nvvp とか使いたさに中途半端に手元のマシンに CUDA を入れているとこういう指定が必要になる。
Deep Learning のデバッグ
ミニバッチ化時にミスることが多いので、以下のようなことをすると良いらしい。
- データごとの計算を書いてみて、1 つずつ計算したものと照合する
- ミニバッチサイズを 1 にして計算したものの和or平均とミニバッチで計算したものを比較する
numpy の行列乗算:matmul, dot, @
dot と matmul
2 次元では完全に同一。3 次元以上では異なる挙動をする。
- dot は a の最後の軸と b の最後から 2 番目の軸を掛け合わせる
- matmul は行列の配列だとみなして行列積を計算する
t-SNE の実装はどれを使うべきなのか?
scikit-learn の問題点
scikit-learn 信者としてはとりあえず scikit-learn の実装を使いたくなるが、scikit-learn の実装はおすすめできないらしい。
- -https://www.red dit.com/r/MachineLearning/comments/47kf7w/scikitlearn_tsne_implementation/ (はてなブログはred ditのURLを貼るとbad requestになり投稿できない謎仕様)
Besides being slower, sklearn's t-SNE implementation is fine once you realize the default learning rate is way too high for most applications. The definitive bh_tsne implementation by the author sets the learning rate to 200, and the original 2008 paper describes setting it to 100, while sklearn is set to 1000.
- 遅い
- デフォルト値の learning rate が大きすぎる
とのこと。それに加えて、自分の経験としては、Barnes Hut 木を指定してもメモリをもりもり確保して(即 Θ(n^2) のメモリを確保してる気がする)メモリ不足で死ぬ。だめ。
公式実装に基づくものたち
自分の結論
$ pip install bhtsne
からの
import sklearn.base import bhtsne import numpy as np class BHTSNE(sklearn.base.BaseEstimator, sklearn.base.TransformerMixin): def __init__(self, dimensions=2, perplexity=30.0, theta=0.5, rand_seed=-1): self.dimensions = dimensions self.perplexity = perplexity self.theta = theta self.rand_seed = rand_seed def fit_transform(self, x): return bhtsne.tsne( x.astype(np.float64), dimensions=self.dimensions, perplexity=self.perplexity, theta=self.theta, rand_seed=self.rand_seed)
バイナリ探偵をする時に使うコマンド
共有ライブラリ編
- env | grep LD
- md5sum
- 一致してるものを調べる
- ls -l
- シンボリックリンクを調べる
- readelf -a hogehoge.so
- readelf -a hogehoge.so | grep SONAME
- SONAME を調べる
- find build/ -name '*so' | xargs ldd | less
- 依存関係を調べる
- ldd `which hoge` とかも
- LD_DEBUG=all <コマンドを実行>
- 共有ライブラリの読み込みに関して大量のデバッグログが吐かれる
- objdump -d hogehoge.so | less
- アセンブラを読む
- 特に、<関数名> で検索することが多い
- man ld-linux.so
- readeof -d hoge.so
- nm -D hoge.so
Python のデータ並列な処理を早くするやつ
numexpr
numba
CPU でいい感じと噂の NN フレームワーク
autograd(微分可能 numpy)
NN フレームワークのベンチマーク
DeepMark
iperfでネットワークの速度を測る
サーバ起動
$ iperf -s
クライアント
$ iperf -c <サーバ>
PyCharmを使いこなしたい
- shift 2回押し:search everywhere
- alt+enter:警告が出ているところで修復(自動import、initでself.hogeにコピー)
- command+shift+A:ランチャー的なモノ起動
- F1:quick documentation
- Shift+F1:external documentation(ブラウザ)
- Command+B:定義に飛ぶ
- Ctrl+Shift+R:実行
https://www.jetbrains.com/help/pycharm/2016.1/keyboard-shortcuts-you-cannot-miss.html
その他
MSR Initialization
wscaleに√2を与える
Python でのデータ処理パイプライン
統計的処理、特徴量抽出、機械学習の訓練・予測のパイプラインを上手く扱いたい。
- scikit-learn:パイプラインがあるが、キャッシュしたりできない。
- joblib:scikit learn と仲良し(バンドル)。キャッシュしたりする機能がある。
- maf:求めているものに近いと思うけど、メンテされているのだろうか
並列・分散処理
- Celery:古そうに見えたが今も使われているようだ
- RQ http://python-rq.org/
- Dask:EC2ともくっついていてよさそう。joblib フロントエンドがあるがこれは使い物になるのか。なったらとても便利かも。
- mesos:期待していたが、Python のコードがパット見で触れたくない感じだった(Python2だしlowerCamelCaseだし)