FC2カウンター FPGAの部屋 カーブ、直線用白線間走行用畳み込みニューラルネットワーク10(重みとバイアスをC のヘッダファイルに変換)
FC2ブログ

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

FPGAの部屋

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

カーブ、直線用白線間走行用畳み込みニューラルネットワーク10(重みとバイアスをC のヘッダファイルに変換)

カーブ、直線用白線間走行用畳み込みニューラルネットワーク9(量子化)”の続き。

前回は、カーブと直線の白線間を走行するためのデータセットで畳み込みニューラルネットワークを学習したときの重みとバイアスを量子化してどのくらいの精度が出るのか?を検証した。今回は、その重みとバイアスを C のヘッダファイルに変換して、Vivado HLS で使用できるようにしてみよう。

畳み込み層の重みをCヘッダファイルに書き出すPython コードの fwrite_conv_weight() 関数や畳み込み層と全結合層のバイアスをCヘッダファイルに書き出すPython コードの fwrite_bias() 関数、全結合層の重みをCヘッダファイルに書き出すPython コードの fwrite_af_weight() 関数は”「ゼロから作るDeep Learning」の畳み込みニューラルネットワークのハードウェア化3”コードそのままなのだが、全結合層の重みの小数部が 10 ビット取ってあるので、重みとバイアスの定義を畳み込み層用(MAGNIFICATION_CONV)と全結合層用(MAGNIFICATION_AF)用に分けた。
それで畳み込み層と全結合層 2 層分の重みとバイアスを C のヘッダファイルに変換した。そのPython コードを示す。

MAGNIFICATION_CONV = 2 ** (9-1)
fwrite_conv_weight(network.params['W1'], 'conv1_weight.h', 'conv1_fweight', 'conv1_weight', MAGNIFICATION_CONV)

fwrite_bias(network.params['b1'], 'conv1_bias.h', 'conv1_fbias', 'conv1_bias', MAGNIFICATION_CONV)
MAGNIFICATION_AF = 2 ** (11-1)
fwrite_bias(network.params['b2'], 'af1_bias.h', 'af1_fbias', 'af1_bias', MAGNIFICATION_AF)
fwrite_bias(network.params['b3'], 'af2_bias.h', 'af2_fbias', 'af2_bias', MAGNIFICATION_AF)

fwrite_af_weight(network.params['W2'], 'af1_weight.h', 'af1_fweight', 'af1_weight', MAGNIFICATION_AF)
fwrite_af_weight(network.params['W3'], 'af2_weight.h', 'af2_fweight', 'af2_weight', MAGNIFICATION_AF)


curve_tracing_cnn_48_171219.png

実行結果として、af1_bias.h、af1_weight.h、af2_bias.h、af2_weight.h、conv1_bias.h、conv1_weight.h が生成された。
curve_tracing_cnn_46_171219.png

af1_weight.h などはかなり大きいので、 conv1_weight.h を例として示す。
curve_tracing_cnn_47_171219.png
  1. 2017年12月19日 04:31 |
  2. DNN
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
https://marsee101.blog.fc2.com/tb.php/4009-49f0c974
この記事にトラックバックする(FC2ブログユーザー)