文書の過去の版を表示しています。
開発
design doc 的な?
hellflame
hellflame というコマンドを作成し,
hellflame hoge というサブコマンドで面倒くさいことを色々とやれるようにする.
train
train が開始されたら
環境変数に応じたディレクトリを用いる.
実験時のディレクトリをサンドボックス化することが主な用途.
実験に使用中のファイルを編集してしまわないようにコピーを作成する.
基本的に全て実験定義ファイルにしたがって実験を開始する.
configファイルの定義
仕様をどうするか?
ツールとか
ビルドシステムについてメモ
| 低レイヤー? | Make, MSBuild, XCode, Ninja |
| 高レイヤー? | CMake, premake, Bazel, qmake? |
OpenCV は CMake を使っているっぽい。一番ナウいのはGoogleの作っているBazel?
NinjaはMakefileに変わる高速なビルドシステム。ただし人間が書くものではなく、 高レイヤーのシステムから自動生成されることが想定されている。
CI
オープンソースな Jenkins が最強?
テストシステムについて
- Google Test
OpenCVなどで使われている。画像の入出力も比較できるか?
研究過程で生み出したもの
non-clip distribution
問題点とやりたいこと
プロシージャルモデリング用途でいい感じの確率密度分布からサンプリングした値を使いたい。
正規分布は値の範囲が無限なので使いづらい。正規分布で最小値・最大値を決めてクリップしてしまうと、
最小値・最大値に分布が偏るのであまりよくない。
なので、最小値最大値を決められつつ、そのような最小値最大値という極端な値での生起確率も決めることができて、 最頻値も決められるような良い確率分布を定義した。
解決方法
ここで最小値 $v_{min}$ 最大値 $v_{max}$ の生起確率を $p_{base}$ とする。
最頻値を決められて0,1 での生起確率が 0 な正規分布に似た形の分布としてベータ分布(第一種ベータ分布)があるのでこれを使う。
(numpyなどで簡単に利用可能)
ベータ分布の形状を制御するパラメータは $\alpha$ と $\beta$ の二つの実数値である。
ベータ関数 $B(\alpha,\beta)$ を用いて以下のように定義される。
$$
f(x;\alpha,\beta) = \frac{x^{\alpha-1}(1-x)^{\beta-1}}{B(\alpha,\beta)}
$$
正規分布のような上に山なりの形状にするには $\alpha,\beta>1$ である必要があるが、
この条件下で最頻値 $v_{mode}$ は次のように決まる。
$$
v'_{mode} = \frac{\alpha-1}{\alpha+\beta-2}
$$
とりあえず最小値・最大値での生起確率を 0 としたとき、 $\alpha=2$を固定として $v_{min}, v_{max}, v_{mode}$ を用いて次のように表せる。 $$ v'_{mode} = \frac{v_{mode}-v_{min}}{v_{max}-v_{min}} \\ \beta = 1/v'_{mode}\\ f'(x) = f\left( \frac{x-v{min}}{v_{max}-v_{min}};\alpha,\beta \right) $$
