FC2カウンター FPGAの部屋 keras_compressor のモデルをVivado HLSで実装する3(model_raw.h5 全結合層第1層目)
FC2ブログ

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

FPGAの部屋

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

keras_compressor のモデルをVivado HLSで実装する3(model_raw.h5 全結合層第1層目)

keras_compressor のモデルをVivado HLSで実装する2(model_raw.h5 畳み込み層第2層目)”の続き。

前回は、keras compressor のMNIST サンプルの model_raw.h5 の畳み込み層第2層目を解析した。今回は、全結合層の第1層目をやってみよう。

model.summary() で取得した各層の情報を元に全結合層第1層目の中間出力を取り出す。

# 1番目のdense layer1の中間出力を取り出す
from keras.models import Model

dense_layer1_name = 'dense_1'

dense_layer1 = model_raw.get_layer(dense_layer1_name)
dense_layer1_wb = dense_layer1.get_weights()

dense_layer1_model = Model(inputs=model_raw.input,
outputs=model_raw.get_layer(dense_layer1_name).output)
dense_layer1_output = dense_layer1_model.predict(x_test, verbose=1)


10000/10000 [==============================] - 5s 501us/step


全結合層第1層目の重みやバイアスの配列の構成を見てみよう。

dense_layer1_weight = dense_layer1_wb[0]
dense_layer1_bias = dense_layer1_wb[1]

print(dense_layer1_weight.shape)
print(dense_layer1_weight.T.shape)
print(dense_layer1_bias.shape)


(9216, 128)
(128, 9216)
(128,)


統計情報を示す。

# Dence layer1の中間出力の統計情報の表示
import numpy as np
dence_layer1_weight = dence_layer1_wb[0]
dence_layer1_bias = dence_layer1_wb[1]

print(dence_layer1_weight.shape)
print(dence_layer1_bias.shape)

print("dence_layer1_weight = {0}".format(dence_layer1_weight))
print("dence_layer1_bias = {0}".format(dence_layer1_bias))

print("np.max(dence_layer1_weight) = {0}".format(np.max(dence_layer1_weight)))
print("np.min(dence_layer1_weight) = {0}".format(np.min(dence_layer1_weight)))
abs_dence_layer1_weight = np.absolute(dence_layer1_weight)
print("np.max(abs_dence_layer1_weight) = {0}".format(np.max(abs_dence_layer1_weight)))
print("np.min(abs_dence_layer1_weight) = {0}".format(np.min(abs_dence_layer1_weight)))

print("np.max(dence_layer1_bias) = {0}".format(np.max(dence_layer1_bias)))
print("np.min(dence_layer1_bias) = {0}".format(np.min(dence_layer1_bias)))
abs_dence_layer1_bias = np.absolute(dence_layer1_bias)
print("np.max(abs_dence_layer1_bias) = {0}".format(np.max(abs_dence_layer1_bias)))
print("np.min(abs_dence_layer1_bias) = {0}".format(np.min(abs_dence_layer1_bias)))

print("dence_layer1_output = {0}".format(dence_layer1_output.shape))
print("np.std(dence_layer1_output) = {0}".format(np.std(dence_layer1_output)))
print("np.max(dence_layer1_output) = {0}".format(np.max(dence_layer1_output)))
print("np.min(dence_layer1_output) = {0}".format(np.min(dence_layer1_output)))

abs_dence_layer1_output = np.absolute(dence_layer1_output)
print("np.max(abs_dence_layer1_output) = {0}".format(np.max(abs_dence_layer1_output)))
print("np.min(abs_dence_layer1_output) = {0}".format(np.min(abs_dence_layer1_output)))


(9216, 128)
(128,)
dence_layer1_weight = [[ 0.00470384 -0.01098892 0.0251282 ... -0.02190203 0.01992498
-0.00856046]
[-0.00689279 0.00944513 -0.01233803 ... 0.02524373 -0.02891207
-0.00187604]
[-0.00194416 0.03971022 0.03803337 ... 0.01431566 0.00224361
0.02952734]
...
[ 0.03151323 -0.00314217 -0.00652592 ... -0.02395282 0.0161369
0.02760857]
[-0.04572763 0.05457359 0.00654751 ... -0.00405126 -0.00480561
-0.05019789]
[ 0.01498569 0.0050351 0.04433047 ... -0.00691412 0.03109068
-0.01302621]]
dence_layer1_bias = [-0.06168257 -0.1514682 -0.1322928 -0.10744902 -0.08265022 -0.05077443
-0.06567107 -0.09612435 -0.16938643 -0.08640631 -0.17030963 -0.0943355
-0.00991632 -0.08720349 -0.12731756 -0.07198199 -0.11136244 -0.08368985
-0.13953699 -0.131075 -0.08466823 -0.00631496 -0.17218405 -0.06344838
-0.17180654 -0.14032175 -0.07136092 -0.09621119 -0.00660794 -0.01606259
-0.09382402 -0.04687085 -0.10574532 -0.16411512 -0.01561454 -0.06328947
-0.15161262 -0.08436941 -0.10497447 -0.12699552 -0.12868118 -0.09164497
-0.11735129 -0.17970178 -0.11265838 -0.076789 -0.11856248 -0.06805629
-0.11970215 -0.10988984 -0.01188129 -0.11470675 -0.11072908 -0.0443239
-0.13116506 -0.13980559 -0.11000474 0.00931341 -0.06132468 -0.12936714
-0.11785036 -0.14282347 -0.11910468 -0.16563804 -0.1154892 -0.06983681
-0.09040678 -0.11911937 -0.13075021 -0.07354662 -0.17754656 -0.03138041
-0.10065349 -0.10409548 -0.08683839 -0.09837727 -0.04784932 -0.00906859
-0.01060055 -0.10975196 -0.11331895 -0.14100014 -0.13861252 -0.09429768
-0.1434664 -0.07264388 -0.03577153 -0.00947432 -0.05689292 -0.17511971
-0.00466694 -0.14445004 -0.1057132 -0.0294685 -0.14415818 -0.09408505
-0.05248842 -0.07065452 -0.12279639 -0.04660085 -0.15480113 -0.17639175
-0.0758699 -0.10553791 -0.05692659 -0.08024313 -0.1117903 -0.11112501
-0.04388554 -0.08886621 -0.15003382 -0.09736416 -0.12964201 -0.06801744
-0.08971801 -0.11670808 -0.12153988 -0.00981606 -0.09409956 -0.10864237
-0.13626133 -0.05466016 -0.11123326 -0.07980989 -0.16771536 -0.10403304
-0.1670245 -0.21162453]
np.max(dence_layer1_weight) = 0.5825158953666687
np.min(dence_layer1_weight) = -0.41720789670944214
np.max(abs_dence_layer1_weight) = 0.5825158953666687
np.min(abs_dence_layer1_weight) = 6.024913545843447e-08
np.max(dence_layer1_bias) = 0.00931340642273426
np.min(dence_layer1_bias) = -0.21162453293800354
np.max(abs_dence_layer1_bias) = 0.21162453293800354
np.min(abs_dence_layer1_bias) = 0.004666939377784729
dence_layer1_output = (10000, 128)
np.std(dence_layer1_output) = 0.6154659986495972
np.max(dence_layer1_output) = 4.879707336425781
np.min(dence_layer1_output) = 0.0
np.max(abs_dence_layer1_output) = 4.879707336425781
np.min(abs_dence_layer1_output) = 0.0


全結合層第1層目の重みのグラフを示す。

# Dence layer1のweightのグラフ
dence_layer1_weight_f = dence_layer1_weight.flatten()
plt.plot(dence_layer1_weight_f)
plt.title('dence_layer1_weight')
plt.show()


keras_compressor_52_190306.png

全結合層第1層目のバイアスのグラフを示す。

# Dence layer1のbiasのグラフ
dence_layer1_bias_f = dence_layer1_bias.flatten()
plt.plot(dence_layer1_bias_f)
plt.title('dence_layer1_bias')
plt.show()


keras_compressor_53_190306.png
  1. 2019年03月06日 04:42 |
  2. DNN
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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