TadaoYamaokaの日記

山岡忠夫 Home で公開しているプログラムの開発ネタを中心に書いていきます。

C++

C++でディリクレ分布による乱数生成

C++

C++にディリクレ分布で乱数生成する標準関数は用意されていない。ガンマ分布で乱数生成する標準関数std::gamma_distributionが用意されているので、 Dirichlet distribution - Wikipedia に書かれている方法を使って、ガンマ分布で乱数y1,...,yKを生成し、 …

PythonからC++を呼び出してnumpyを使う

将棋でディープラーニングを試しているが、Pythonで入力データの加工を行うと処理速度が問題になっている。そこで、PythonからC++で作成したモジュールを呼び出して、その中でnumpyのオブジェクトの加工を行いたい。 PythonからC++の呼び出しはオーバーヘッ…

cuDNNでAlphaGoのSL policy networkの順伝播を実装する

Chainerを使って学習したAlphaGoのSL policy networkのモデルを使用して、C++のプログラムからcuDNNを使用して順伝播を実装してみた。SL policy networkを囲碁のプログラムに組み込んで使おうとすると、PythonとChainerが必要になるのでは実行環境の敷居が高…

コンパイラによるFFTの速度比較(再測定)

以前の日記で、コンパイラごとのFFTの実行速度を比較した結果を記載しましたが、この記事を見て、gccがVisual C++に比べて速いという内容が以前の私の測定と違っていたので再測定を行いました。この記事で使用しているgccは、MSYS2のものを使用しているよう…

CaffeでSL policy networkを学習

前回の日記で定義した、AlphaGoのSL policy networkをCaffeで学習してみた。以前にChainerを使って学習した結果と速度、精度を比較するため、条件を合わせている。 インターネットから入手したプロの棋譜を使用 特徴はAlphaGoの論文のExtended Data Table 2…

Caffeを使ってC++で3層パーセプトロンを学習する

前回の日記でCaffeをC++から使うことができたので、3層パーセプトロンを学習させてみた。Caffeではモデルをprototxt形式で記述する。 学習方法を記述したsolver.prototxtとネットワークを記述したnet.prototxtの2つのファイルを作成する。 ファイル名は別の…

WindowsでビルドしたCaffeをC++から使う

前回の日記でWindowsでビルドしたCaffeをC++から使うことができたので方法を書いておきます。Windows版caffeをビルドしたVisual Studio 2013のソリューションにプロジェクトを追加する形でプロジェクトを作成します。 はじめソリューションを新規作成して、…

ChainerのモデルをC++で読み込む

以前の日記でAlphaGoのSL policy networkをChainerで学習した結果をC++の囲碁プログラムで使用したいと考えている。 その際、C++からPythonを実行するのでは、オーバーヘッドが大きく、実行環境のハードルが上がりポータビリティが下がってしまう。 そこで、…