AutoEncoder の記事を記述しました

AutoEncoder による DNN 初期化方法に関する記述を
ホームページ記事に追加しました。

今回の検証は python で行ったため、レポジトリを分けました。

Java による実装はそのうち手が空いた時に行おうと思います。

ML_python レポジトリを追加

ようやく AutoEncoder を使った DNN が動いたので、GItHub に公開しました。

とりあえず、途中まで教科書「ゼロから作る Deep Learning」を参考にしつつ、
AutoEncoder クラスや MultiLayerNet クラスを追加しています。

4000回の学習でテストデータに対し、最小 88%、最大 96%程度の認識率を
持たせることができました。

DNN は途中のデバッグが非常に困難に感じます。既存の DNN ライブラリは
どうやってデバッグを解決しているのでしょうか。

記事の方はそのうち更新したいと思います。

numba パッケージの記事を追加しました

numba パッケージを使う場合のヒントに関する記事をこちらにアップしました。

ループ数が小さかったり配列数が小さかったりすると CUDA の効果はほぼないです。
手軽に CUDA を使って実験したい場合に重宝しそうです。

なお、一定数ループを回ると実行速度がぐんと上がる現象が見られています。
(python3 の実行エンジンの関係かもしれませんが)

CUDA9.2 を使って JCuda0.9.0d をコンパイルする

JCuda – ダウンロードとコンパイルで解説しているように実行すると、JCufft を作成する時にエラーで止まります。

これは9.1から cufftSetCompatibilityMode() が削除されたためなので、jcufft/JCufftJNI/src/JCufft.cpp の最後の関数の戻り値を JCUFFT_INTERNAL_ERROR 等に変更します。

これでコンパイルが通るようになりますが、今度は jcuda-main に移動して mvn clean するときに失敗します。この原因は pom.xml に cuDNN の設定が入っていることと、デフォルトの Ubuntu 16.04.x に openjdk-8-jdk パッケージがインストールされていないためです。

pom.xml から cuDNN の設定を削除し、openjdk-8-jdk をインストールすると、mvn install が成功し、output ディレクトリに jar ファイルが作成されます。

そのうち HP の方も修正します。修正しました。

久々の投稿: python で cavity 問題を解いてみた

python3 で2次元の cavity 問題を解いたサイトがないか調査していたが、探しきれなかったので、

https://github.com/minosys-jp/Fluid.git

の方に登録してみました。高速化は numpy, numba で実行していますが、numpy のみを使った方が成績が良いようです。

出力をアニメーションしようとすると多大な時間がかかります。matplotlib の実装が悪いからだと思います。

後日談: OpenFOAM があることに気づきました。でもたまには自分の手を動かすのもよいかと。