FC2カウンター FPGAの部屋 2018年07月02日

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

Kerasを使用したMNIST CNNで手書き文字認識7(特徴マップが3個のMNISTのCNNを再学習)

Kerasを使用したMNIST CNNで手書き文字認識6(実機確認3)”の続き。

前回は、考えられる 2 つの原因の内の量子化の精度、および飽和演算について検証を行ったが、浮動小数点数による特徴マップが3個のMNISTのCNN の演算でも手書き数字を誤認識していたので、量子化の精度、および飽和演算の問題ではないという結論になった。今回は、過学習が手書き数字の誤認識に影響しているのか?を確かめるために、Epoch 数を変更して再学習を行った。

まずは、jupyter notebook で特徴マップが3個のMNISTのCNN の学習を行った。前の結果からトレーニング・データの精度とテスト・データの精度が一致するEpoch 数は 4 程度だというのが分かったので、最大Epoch 数は 4 とした。学習結果を示す。
keras_minst_cnn_51_180702.png

Epoch = 4 の時のトレーニング・データでの精度は0.9744 でテスト・データでに精度は 0.9745 だった。
グラフを示す。
keras_minst_cnn_52_180702.png

学習した重みとバイアスのC ヘッダファイルを生成して、Vivado HLS 2018.2 の mnist_conv_nn3_hlss_ko_dma プロジェクトの重みとバイアスのC ヘッダファイルと交換した。
この状態で、C コードの合成を行った。結果を示す。
keras_minst_cnn_53_180702.png

Export RTLを行って、できたIP をPYNQ_MNIST_CNN3_182 フォルダのVivado 2018.2 のプロジェクトと入れ替えた。
論理合成、インプリメンテーション、ビットストリームの生成を行った。結果を示す。
keras_minst_cnn_50_180702.png

ハードウェアをエクスポートして、SDK を立ち上げた。
浮動小数点数によるMNISTのCNN のC ヘッダファイルも新しい学習した重みとバイアスに変更した。
これで、FPGA をコンフィギュレーションし、アプリケーションソフトの mnist_conv_soft_test.elf を起動した。

最初に手書き数字の 1 を認識させた。
keras_minst_cnn_40_180701.png

1 のはずなのに、ハードウェア、ソフトウェア共に 8 と誤認識された。

2 を認識させた。
keras_minst_cnn_41_180701.png

ハードウェア、ソフトウェア共に 2 で、正解だ。

3 を認識させた。
keras_minst_cnn_42_180701.png

3 もハードウェア、ソフトウェア共に 3 で、正解だった。

4 を認識させた。
keras_minst_cnn_43_180701.png

4 のはずなのに、ハードウェア、ソフトウェア共に 8 と誤認識された。

5 を認識させた。
keras_minst_cnn_44_180701.png

5 はハードウェア、ソフトウェア共に 5 で、正解だった。

6 を認識させた。
keras_minst_cnn_45_180701.png

6 のはずなのに、ハードウェア、ソフトウェア共に 8 と誤認識された。

7 を認識させた。
keras_minst_cnn_46_180701.png

7 のはずなのに、ハードウェア、ソフトウェア共に 3 と誤認識された。

8 を認識させた。
keras_minst_cnn_47_180701.png

ハードウェア、ソフトウェア共に 8 で正解だ。

9 を認識させた。
keras_minst_cnn_48_180701.png

9 のはずなのに、ハードウェア、ソフトウェア共に 8 と誤認識した。

0 を認識させた。
keras_minst_cnn_49_180701.png

ハードウェア、ソフトウェア共に 0 で正解だ。

どうやら、過学習もカメラで撮影した私の手書き数字の認識をミスる原因ではないようだ。
  1. 2018年07月02日 04:23 |
  2. PYNQ
  3. | トラックバック:0
  4. | コメント:0