FC2カウンター FPGAの部屋 DLNN

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

FPGAの部屋

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

DnnWeaverをやってみる1

DnnWeaver をやってみようと思う。
DnnWeaver は、「FPGA上でディープニューラルネットワーク(DNN)を加速するための最初のオープンソースのフレームワーク」(Google 翻訳使用)だそうだ。

DnnWeaver のダウンロードページを見ると、git で clone するようなので、Windows 10 上のVirtualBox でインストールしたUbuntu 16.04 を使用することにした。

まずは、Ubuntu 16.04 のホームで git clone を行った。
git clone https://bitbucket.org/hsharma35/dnnweaver.public.git
すると、dnnweaver.public ディレクトリができた。
DnnWeaver_1_170516.png

DnnWeaver のダウンロードページでは、python 2.7 と Vivado 2016.2 が必須だが、Python 2.7.12 がインストールされているし、Vivado も 2016.4 だが、インストールされているので、これでやってみることにする。

DnnWeaver のダウンロードページでは、fpga ディレクトリに行って、「make PROTOTXT=your_prototxt_here」するようにとのことだった。
dnnweaver.public/fpga に行ってみるとMakefile があった。
DnnWeaver_2_170516.png

しかし、Makefile を見ると、すでに PROTOTXT が定義されているようなので、make だけでやってみることにする。
DnnWeaver_3_170516.png

make すると、google.protobuf.internal の enum_type_wrapper が無いと言われてしまった。
caffe_pb2.py を見ると、、google.protobuf.internal や、google.protobuf からのインポートがたくさんある。
DnnWeaver_5_170516.png

これらはどうやら、googleのprotobuf というものらしい?
DnnWeaver_6_170516.png

googleのprotobufから protobuf-python-3.3.0.tar.gz をダウンロードしてホームディレクトリに解凍した。

caffe_pb2.py のインポートするべきファイルがあった。
DnnWeaver_8_170516.png

今回、protobuf のインストールは行わないで、ファイルだけを利用してみようと思う。
ファイルを利用するためにPYTHONPATH にprotobuf-3.3.0/python を追加する。
export PYTHONPATH="/home/masaaki/protobuf-3.3.0/python:$PYTHONPATH"
そして、もう一度、make を行った。
DnnWeaver_9_170516.png

やはり、エラーで今度は six モジュールが無いとのことだった。
six モジュールは pip でインストールするということで、まずは pip をインストールする。
wget https://bootstrap.pypa.io/get-pip.py
get-pip.py が取得できた。
DnnWeaver_10_170516.png

スーパーユーザー・モードで get-pip.py を起動した。
sudo python get-pip.py
DnnWeaver_11_170516.png

six モジュールをインストールする。
sudo pipinstall six
DnnWeaver_12_170516.png

make すると、今度は、descripter_pb2.py が足りないらしい。
DnnWeaver_13_170517.png

descripter_pb2.py はどうやってゲットするのか?調べていたら、「Why do I see “cannot import name descriptor_pb2” error when using Google Protocol Buffers?」がヒット。それによると、descripter_pb2.py はコンパイルして生成するものらしい?
(注:このWebサイトには、protobuf をインストールするように書いてあったが、インストールしないでやっている。結局うまく行っていないので、インストールしてみようと思う)

続きます。
  1. 2017年05月18日 05:38 |
  2. DLNN
  3. | トラックバック:0
  4. | コメント:0

「ゼロから作る Deep Learning」をやってみる8(8章 ディープラーニング)

引き続き、オライリーの本「ゼロから作る Deep Learning」をやってみよう。コードはオライリー・ジャパンのoreilly-japan/deep-learning-from-scratch にあって、MITライセンスなので、これをjupyter notebook ででやりながらやってみることにした。この本はとっても良い本なので、購入されて勉強することをお勧めする。

今回は、ディープラーニングについて学習する。この辺りになると、論文の紹介が多くなる。概要が見れてうれしい。
演習は畳み込みニューラルネットワーク2層、プーリング1層、畳み込みニューラルネットワーク2層、プーリング1層、畳み込みニューラルネットワーク2層、プーリング1層、全結合1層、ドロップアウト1層、全結合1層、ドロップアウト1層の合計13層のディープラーニング・ニューラルネットワークをdeep_convert.py で実装している。それを train_deepet.py で訓練すると、99.39 |% の正確さでMnist の数字を認識できた。
最後には、64ビット長の浮動小数点数を使ったときと、16 ビット長の浮動小数点数を使ったときの認識精度は変化が無かった。(half_float_network.py)

DLNN_106_170517.png
DLNN_107_170517.png
DLNN_108_170517.png
DLNN_109_170517.png
DLNN_110_170517.png
DLNN_111_170517.png
DLNN_112_170517.png
DLNN_113_170517.png
  1. 2017年05月17日 04:01 |
  2. DLNN
  3. | トラックバック:0
  4. | コメント:0

「ゼロから作る Deep Learning」をやってみる7(7章 畳み込みニューラル ネットワーク)

引き続き、オライリーの本「ゼロから作る Deep Learning」をやってみよう。コードはオライリー・ジャパンのoreilly-japan/deep-learning-from-scratch にあって、MITライセンスなので、これをjupyter notebook ででやりながらやってみることにした。この本はとっても良い本なので、購入されて勉強することをお勧めする。

今回は畳み込みニューラルネットワーク をやってみた。説明は分かりやすかった。
Convolution レイヤやPooling レイヤの実装を学習したが、いまいち頭に入っていないので、あとでもう一度、やってみることにする。
今までの全結合ニューラルネットワークと同様にPython で書けるのは素晴らしい。
畳み込みニューラルネットワークでMnist を学習したときのテストデータの正確さは 98.76 % だった。

DLNN_96_170516.png
DLNN_97_170516.png
DLNN_98_170516.png
DLNN_99_170516.png
DLNN_100_170516.png
DLNN_101_170516.png
DLNN_102_170516.png
DLNN_103_170516.png
DLNN_104_170516.png
DLNN_105_170516.png
  1. 2017年05月16日 04:50 |
  2. DLNN
  3. | トラックバック:0
  4. | コメント:0

「ゼロから作る Deep Learning」をやってみる6(6章 学習に関するテクニック)

引き続き、オライリーの本「ゼロから作る Deep Learning」をやってみよう。コードはオライリー・ジャパンのoreilly-japan/deep-learning-from-scratch にあって、MITライセンスなので、これをjupyter notebook ででやりながらやってみることにした。この本はとっても良い本なので、購入されて勉強することをお勧めする。

今回は学習に関するテクニックを学習した。
パラメータの更新方法で、SGD, Momentum, AdaGrad, Adm を学習した。重みの初期値についてや、Batch Nomalization。
正則化では、過学習に陥る条件やその解消方法としてWeight decay, Dropout を学習した。またハイパーパラメータの最適化について学習した。すべて実際のコードを見て、結果も見られるのが良いと思う。
なお、結果が長い場合は、途中を省略している。

DLNN_55_170514.png
DLNN_56_170514.png
DLNN_57_170514.png
DLNN_58_170514.png
DLNN_59_170514.png
DLNN_60_170514.png
DLNN_61_170514.png
DLNN_62_170514.png
DLNN_63_170514.png
DLNN_64_170514.png
DLNN_65_170514.png
DLNN_66_170514.png
DLNN_67_170514.png
DLNN_68_170514.png
DLNN_69_170514.png
DLNN_70_170514.png
DLNN_71_170514.png
DLNN_72_170514.png
DLNN_73_170514.png
DLNN_74_170514.png
DLNN_75_170514.png
DLNN_76_170514.png
DLNN_77_170514.png
DLNN_78_170514.png
DLNN_79_170514.png
DLNN_80_170514.png
DLNN_81_170514.png
DLNN_82_170514.png
DLNN_83_170514.png
DLNN_84_170514.png
DLNN_85_170514.png
DLNN_86_170514.png
DLNN_87_170514.png
DLNN_88_170514.png
DLNN_89_170514.png
DLNN_90_170514.png
DLNN_91_170514.png
DLNN_92_170514.png
DLNN_93_170514.png
DLNN_94_170514.png
DLNN_95_170514.png
  1. 2017年05月14日 05:40 |
  2. DLNN
  3. | トラックバック:0
  4. | コメント:0

「ゼロから作る Deep Learning」をやってみる5(5章 誤差逆伝播法)

引き続き、オライリーの本「ゼロから作る Deep Learning」をやってみよう。コードはオライリー・ジャパンのoreilly-japan/deep-learning-from-scratch にあって、MITライセンスなので、これをjupyter notebook ででやりながらやってみることにした。この本はとっても良い本なので、購入されて勉強することをお勧めする。

今回は誤差逆伝播法だ。4 章では、数値微分で重みの学習を行ったが、この章では、誤差逆伝播法でニューラルネットワークの学習を行っている。数値微分法の方が誤差逆伝播法よりも約2万倍遅いという結果が出た。衝撃的だった。その位の差があるようだ。。。

DLNN_42_170513.png
DLNN_43_170513.png
DLNN_44_170513.png
DLNN_45_170513.png
DLNN_46_170513.png
DLNN_47_170513.png
DLNN_48_170513.png
DLNN_49_170513.png
DLNN_50_170513.png
DLNN_51_170513.png
DLNN_52_170513.png
DLNN_53_170513.png
DLNN_54_170513.png
  1. 2017年05月13日 04:26 |
  2. DLNN
  3. | トラックバック:0
  4. | コメント:0

「ゼロから作る Deep Learning」をやってみる4(4章 ニューラルネットワークの学習)

引き続き、オライリーの本「ゼロから作る Deep Learning」をやってみよう。コードはオライリー・ジャパンのoreilly-japan/deep-learning-from-scratch にあって、MITライセンスなので、これをjupyter notebook ででやりながらやってみることにした。この本はとっても良い本なので、購入されて勉強することをお勧めする。

今度はニューラルネットワークの学習だ。
ここでは、誤差逆伝播法を使ってなくて、すべての層の重みに関する損失関数の偏微分を行って傾きを求めて損失関数が小さくなる方向に重みを更新しているようだ。これでも求められるが計算時間がかかるという欠点があるようだ。
DLNN_24_170511.png
DLNN_25_170511.png
DLNN_26_170511.png
DLNN_27_170511.png
DLNN_40_170511.png
DLNN_28_170511.png
DLNN_29_170511.png
DLNN_30_170511.png
DLNN_31_170511.png
DLNN_32_170511.png
DLNN_33_170511.png
DLNN_34_170511.png
DLNN_35_170511.png
DLNN_36_170511.png
DLNN_37_170511.png
DLNN_38_170511.png
DLNN_39_170511.png
DLNN_41_170511.png
  1. 2017年05月11日 05:35 |
  2. DLNN
  3. | トラックバック:0
  4. | コメント:0

「ゼロから作る Deep Learning」をやってみる3(3章 ニューラルネットワーク)

引き続き、オライリーの本「ゼロから作る Deep Learning」をやってみよう。コードはオライリー・ジャパンのoreilly-japan/deep-learning-from-scratch にあって、MITライセンスなので、これをjupyter notebook ででやりながらやってみることにした。この本はとっても良い本なので、購入されて勉強することをお勧めする。

いよいよ3章のニューラルネットワークをやってみる。この章ではニューラルネットワークの推論を簡単なコードで実行することがで来ている。Python って for が要らないことが多いので、コードも短い。
最初に活性化関数のステップ関数、シグモイド関数、ReLU関数をやってみた。
多元配列の練習をしてから、softmax関数を試してた。
その後、MNISTデータセットを使った3層ニューラルネットワークを実装した。
最後に、MNISTデータセットを使った3層ニューラルネットワークのバッチ処理を実装した。
DLNN_8_170509.png
DLNN_9_170509.png
DLNN_10_170509.png
DLNN_23_170509.png
DLNN_11_170509.png
DLNN_12_170509.png
DLNN_13_170509.png
DLNN_14_170509.png
DLNN_15_170509.png
DLNN_16_170509.png
DLNN_17_170509.png
DLNN_18_170509.png
DLNN_19_170509.png
DLNN_20_170509.png
DLNN_21_170509.png
DLNN_22_170509.png
  1. 2017年05月09日 05:03 |
  2. DLNN
  3. | トラックバック:0
  4. | コメント:0