2012-01-01から1年間の記事一覧

ゆるふわ Restricted Boltzmann Machine

Deep Learningで用いられるらしいということで, Restricted Boltzmann Machine(RBM)について調べたので概要とPythonによる実装例をまとめた. 主にAn Introduction to Restricted Boltzmann Machinesを参考にしているので, 数式の詳細はそちらをあたって欲し…

Theano 解説

「Deep Learning Implementation」でググるとトップに出てくることで, たまに話題になるライブラリ Theano について簡単に調べたので紹介する. 間違いがあったら是非教えて欲しい. なお, Deep Learningに関する解説は今回は行わない.TheanoとはPythonにおけ…

パフォーマンス解析に関するまとめ

ここ2日ぐらい調べたパフォーマンス解析に関する調査をまとめる. 推測も含まれているので注意. まず, 当初の目的は「Boost.Pythonを用いて作った共有ライブラリをPythonから呼び出した際のボトルネック(hot spot)を発見したい」だった. パフォーマンス解析…

Boost.Python Tips

Boost Pythonで困ったところを適当にまとめる. 型の対応 (左がPython, 右がC++) numpy.float32 ⇔ float fload ⇔ double 2次元array ⇔ pyublas::numpy_matrix 1次元array ⇔ pyublas::numpy_vector (たぶん) list ⇔ boost::python::list numpy_matrixのインタ…

ATLASを使う

C++

行列演算がボトルネックのコードを書いたので, Automatically Tuned Linear Algebra Software (ATLAS)を導入した. キャッシュサイズなどを考慮して行列演算を行なってくれるため, 自分で適当に書いた奴より速い. uBlasより速いか検討してないが, まあ多分速…

Google Test を使う

C++

C++用のTestライブラリ, google testを使った. インストール Ubuntu12.04でのインストール方法 sudo aptitude install libgtest-dev cd /usr/src/gtest sudo cmake . sudo make sudo mv libg* /usr/lib/ たぶんこれでOK. libgtest-devがヘッダファイルしか入…

C++ 環境設定 (Eclipse CDT 中心)

C++

C++関連の開発環境を整えたので, それに対するメモ. 今まではEmacs中心だったが, Eclipseに移行. Eclipse CDTのインストール 標準ではC++に対応していないので, Eclipse CDTをインストール. Eclipse CDTを組み込んだEclipseを配布しているようだが, 既存のも…

C++ 環境設定 (Eclipse CDTwo)

Eclipse + Python

EclipseでPythonを使う方法をまとめるための記事. インストール デフォルトキーコンフィグなど Eclipseの設定ファイルをエクスポートしたものをGoogleドライブにアップロードしている.設定を書き換えているorよく使うショートカット一覧 (Emacsベース) Delet…

PyGTK + Glade によるGUI開発

自家製ツールに素早くGUIをつけたい, ということでPyGTKを利用した. GUIを作成するライブラリはtkinterを代表として色々ありそうだったが, Windowsで使用可能 比較的緩いライセンス(LGPL) GUIでのインターフェイス構築環境(Glade) という理由でPyGTKを利用す…

Python版mechanizeの関わるテスト

テスト始めました 最近, テストをちゃんと開発工程に入れようとし始めました. まだ手探り状態なんですけど. とりあえず, nosetestsを利用してテストを行おうと思っています参考になったページは Nose利用ノート 公式ドキュメント pdb-failuresオプションは使…

PEP342と343を読んだ

初めてちゃんと英語のPEP(Python Enhancement Proposals)を読んだ. Proposalだったら現在の仕様と違うんじゃないの? とか思ったけど, そのProposalのステータス(議論中・実装済み)とかがちゃんとトップに書いてあった. PEP342 generatorの拡張仕様. それ…

Cにおける加算と除算のコストの比較

C++

後輩とCの加算・除算のコスト差について意見が食い違ったので, 実際にプログラムを書いて比較してみた. マシンスペックはIntel® Core™2 Duo CPU T9300 @ 2.50GHz × 2 Ubuntu11.10 64bit. コンパイラはgccバージョン4.6.1, またコンパイルオプションは常に-O0…

PyGTKに関するメモ

PyGTKを勉強中. 一つのイベントに複数のcall_backを結び付けられる call_backが呼ばれる順は結び付けれられた順 connectの返り値はidでそれを使うとunconnect出来る

Google or-toolsをインストールする

Googleが出している制約最適化ライブラリor-toolsをインストールします. 今回はPythonからの利用に絞っています. 環境はUbuntu 11.10 64bitです. 基本的には, 公式のGetting startedに従います. sudo apt-get install bison flex python-setuptools python-d…

scipy/numpyのBoost.Pythonによる高速化

Boost.PythonとPyUblasに関して, 今まで適当に書いていた日記をまとめたもの. 詳細は過去の日記へのリンクをあちこちに貼ってある. 前書き Pythonは言わずと知れた非常に遅い言語だ. Pythonで大きなループを含む処理を書くことは即ち死を意味する. 例えば手…

PyUblasとBoost.Pythonを使ったDTWの実装

PyUblasを試すために, 今回は距離関数の一つであるDTW(Dynamic Time Warping)を実装する. DTWの説明は余所で読んでもらうとして, まあ2つの長さが異なるベクトルx,y の距離をO(|x|×|y|)で計算するアルゴリズムだと思ってもらえばいい. 今回はパフォーマンス…

Boost.Pythonでtupleとlistの返し方

こう namespace py = boost::python; py::list test() { py::list l; l.insert(0,1); l.insert(0,make_tuple(2,3)); return l; }参考ページ: Boost.Python.list

PyUblas を使う

PyUblasはBoost.PythonとNumpyの間のデータ受け渡しをサポートする素敵ライブラリーだ. かなり便利. インストール方法は, 公式ドキュメントを参照. ただ, インストール過程で何箇所か戸惑う所があった. まず, コンパイルエラーが出たことと(const変数から非c…

Boost.PythonとNumPy Array (C API編)

Boost.PythonでNumPyのarrayを受け取る手段として, NumPyが提供するCのAPIを使うという手がある. 使いづらいが機能的には完全であることと, CとPythonを協調して使う際の知見となるため, 記録を残しておく.基本的な使い方はこちらのページを見ればわかる. Bo…

Boost.Pythonの使い方とNumpy/Scipy arrayの渡し方

scipyで書いたプログラムでも一部が遅くてそこをC++で実装したいというシナリオはよくある. それには色々な手段があるというのは以前の日記でも紹介した通り. 今回はBoost.Pythonでscipy/numpyのarray(ndarray)を取り扱う方法を説明する. 基本的な使い方はbo…

ラグランジュの未定乗数法における行列で表現される制約

みたいな制約があるときのラグランジュの未定乗数法は, という項を付け加えれば良い. 当たり前なんだけど忘れちゃうんだよなー. マジ修行不足

総和とtraceの関係

数学の忘れがちなことをメモしていくシリーズ. 今回は, PCAの証明で出てくる総和をtraceに変換する奴. 複数行にまたがる証明を書く楽なやり方がわからない・・・.数式の埋め込み方はこちらのサイトにお世話になっています. はてなダイアリーのtex記法は綺麗…