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

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

FPGAの部屋

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

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

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

前回は、MNIST のCNN の特徴マップが3個の時に過学習が手書き数字の誤認識に影響しているのか?を確かめるために、Epoch 数を変更して再学習を行った時の重みやバイアスをVivado HLS のC ヘッダ・ファイルとして代入した時の結果を示した。今回は、特徴マップが3個の時には、あまり精度の向上が見られなかったため、MNIST のCNN の特徴マップが10個の場合を再学習してVivado HLS で精度を確認してみようと思う。

まずは、MNIST のCNN の特徴マップが10個の場合をKeras で再度学習した。epoch = 3 とした。
keras_mnist_cnn_76_180704.png

keras_mnist_cnn_77_180704.png

np.std(conv_output) = 0.49935710430145264
np.max(conv_output) = 2.8642632961273193
np.min(conv_output) = -3.466301202774048

np.std(dence_layer1_output) = 2.0340144634246826
np.max(dence_layer1_output) = 9.999906539916992
np.min(dence_layer1_output) = -10.721842765808105

np.std(dence_layer2_output) = 6.04936408996582
np.max(dence_layer2_output) = 24.52584457397461
np.min(dence_layer2_output) = -21.551403045654297

重みとバイアスをC のヘッダ・ファイルとして出力してVivado HLS 2017.4 でC シミュレーションを行った。
keras_mnist_cnn_73_180703.png

mnist_conv_nn10_hlss.h の AFFINE_INTEGER_LEN は 5 ビットだったが、np.max(dence_layer2_output) と np.min(dence_layer2_output) を見ると、約 24.5 と約 -21.6 なので、整数部は 6 ビット必要なので、AFFINE_INTEGER_LEN を 6 とした。
keras_mnist_cnn_74_180703.png

これで、もう一度 C シミュレーションを行ったが、ハードウェアのエラーが増えてしまった。
keras_mnist_cnn_75_180703.png

小数点以下の精度が足りなかったのだろうということで、AFFINE_INTEGER_LEN を 5 ビットに戻した。

(2018/07/05 : 追記)
全結合層 2 層目の最大値が 24 程度なのに、全結合層の整数部が 5 ビットではまずい気がしてきたので、全結合層の整数部を 6 ビットにすると同時に、全結合層の総ビット数も 15 ビットから 16 ビットに変更した。
keras_mnist_cnn_82_180705.png

C シミュレーションを行ったところ、ハードウェアとソフトウェアの誤差は共に 20 個になった。
keras_mnist_cnn_83_180705.png

HW_ERROR_COUNT = 20, SW_ERROR_COUNT = 20


これで行こうと思う。
  1. 2018年07月04日 03:51 |
  2. PYNQ
  3. | トラックバック:0
  4. | コメント:0