iwiwi 備忘録

学んだことを殴り書きます。自分向けのメモです。

機械学習アルゴリズムの直感を養えるデモ・記事

発見次第更新予定

デモ

Neural Network

Gradient Boosting

t-SNE

リンク集

記事

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, @

stackoverflow.com

dot と matmul

2 次元では完全に同一。3 次元以上では異なる挙動をする。

  • dot は a の最後の軸と b の最後から 2 番目の軸を掛け合わせる
  • matmul は行列の配列だとみなして行列積を計算する

@ 演算子

Python 3.5 以降では @ 演算子や @= 演算子が存在する。これは __matmul__ を呼ぶが、numpy では 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

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


その他

  • live templatew を見ておくとよいかもしれない
  • Python console でスタート時に先に実行するスクリプトをかいとける
  • extraction 便利そう
  • ディレクトリのとこで右クリックして find in path
  • ソースコードを右クリックして find usages

www.youtube.com

www.youtube.com