fc2ブログ
theano豆知識
もはやマニアック過ぎて誰にも響かない気がしますが、自分用のメモに。
KerasやPylearn2など、theanoをベースにしているDeep Learningのライブラリを、複数のGPUカードを搭載しているマシンで使おうと思うと、一番簡単なのはプロセスを分けて、それぞれに別のGPUを使ってもらうやり方かと思います。たとえばこんな感じです。

$ THEANO_FLAGS=mode=FAST_RUN,device=gpu0 python my_script.py

これで、gpu1とか名前変えれば、別のGPU使ってくれるので、おお良いじゃんと思っていたら、どうも調子がわるい。

INFO (theano.gof.compilelock): Waiting for existing lock by process '39079' (I am process '39251')

ちょっと調べて見ると、theanoがコンパイルのために使う一時ディレクトリが、プロセス間で共有され、その都度ロックされている模様。これを解決tするには、実行時に以下の様に設定すればOKです。

$ THEANO_FLAGS=mode=FAST_RUN,device=gpu0,base_compiledir=dir0 python my_script.py

GPUごとに名前を変えれば、それぞれのディレクトリを使ってくれます。自動でやってくれてもいいのに・・・とちょっと思いますが、まあ無料で使わせてもらっているので、文句は言えません。
スポンサーサイト



【2015/08/05 11:55】 | Python | トラックバック(0) | コメント(0) | page top↑
主成分分析(PCA)の結果をプロット
データの次元を縮約する方法の1つに、主成分分析(Principle Component Analysis)がありますが、その結果をプロットするコードをメモ。

from mpl_toolkits.mplot3d import Axes3D
import pylab
from sklearn.decomposition import PCA
def draw_3d_pca(_values):
pylab.clf()
_rep = PCA(n_components=3).fit_transform(_values)
fig = pylab.plt.figure()
ax = fig.gca(projection='3d')
for d in _rep:
ax.scatter(d[0],d[1],d[2],c='r',marker='o')
pylab.show()

引数は行が変数、列がサンプルの行列です。事前にサンプルの属性がわかっている場合は、プロットするとき色を変えると分かり易いかも知れません。

IPythonを使っている場合、%matplotlib inlineとすると、結果がブラウザの中に表示されますが、3次元の場合、マウスで角度を変えられません。まあ、inlineにせず、別Windowで表示すれば、通常のmatplotlibの機能として、3Dプロットの角度を変えられますが、ブラウザの中で出来たらカッコいいと思い探してみると、mpld3を発見。
おおカッコいいと思って使ってみるも、3Dには対応していないことが判明。残念。でも、2Dのプロットなら、拡大とか出来て便利です。PCAの話題というより、mpld3が3次元プロットには対応していないというのが結論です。お気をつけください。
【2015/08/04 17:30】 | Python | トラックバック(0) | コメント(0) | page top↑
| ホーム |