AutoEncoder による DNN 初期化方法に関する記述を
ホームページ記事に追加しました。
今回の検証は python で行ったため、レポジトリを分けました。
Java による実装はそのうち手が空いた時に行おうと思います。
気ままな技術者生活から人生について考える
AutoEncoder による DNN 初期化方法に関する記述を
ホームページ記事に追加しました。
今回の検証は python で行ったため、レポジトリを分けました。
Java による実装はそのうち手が空いた時に行おうと思います。
ようやく AutoEncoder を使った DNN が動いたので、GItHub に公開しました。
とりあえず、途中まで教科書「ゼロから作る Deep Learning」を参考にしつつ、
AutoEncoder クラスや MultiLayerNet クラスを追加しています。
4000回の学習でテストデータに対し、最小 88%、最大 96%程度の認識率を
持たせることができました。
DNN は途中のデバッグが非常に困難に感じます。既存の DNN ライブラリは
どうやってデバッグを解決しているのでしょうか。
記事の方はそのうち更新したいと思います。
numba パッケージを使う場合のヒントに関する記事をこちらにアップしました。
ループ数が小さかったり配列数が小さかったりすると CUDA の効果はほぼないです。
手軽に CUDA を使って実験したい場合に重宝しそうです。
なお、一定数ループを回ると実行速度がぐんと上がる現象が見られています。
(python3 の実行エンジンの関係かもしれませんが)
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 の方も修正します。修正しました。
python3 で2次元の cavity 問題を解いたサイトがないか調査していたが、探しきれなかったので、
https://github.com/minosys-jp/Fluid.git
の方に登録してみました。高速化は numpy, numba で実行していますが、numpy のみを使った方が成績が良いようです。
出力をアニメーションしようとすると多大な時間がかかります。matplotlib の実装が悪いからだと思います。
後日談: OpenFOAM があることに気づきました。でもたまには自分の手を動かすのもよいかと。