”
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 とした。


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 シミュレーションを行った。

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 とした。

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

小数点以下の精度が足りなかったのだろうということで、AFFINE_INTEGER_LEN を 5 ビットに戻した。(2018/07/05 : 追記)全結合層 2 層目の最大値が 24 程度なのに、全結合層の整数部が 5 ビットではまずい気がしてきたので、全結合層の整数部を 6 ビットにすると同時に、全結合層の総ビット数も 15 ビットから 16 ビットに変更した。

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

HW_ERROR_COUNT = 20, SW_ERROR_COUNT = 20
これで行こうと思う。
- 2018年07月04日 03:51 |
- PYNQ
-
| トラックバック:0
-
| コメント:0