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

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

FPGAの部屋

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

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

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

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

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

from keras.models import Model

dense_layer2_name = 'dense_2'

dense_layer2 = model_raw.get_layer(dense_layer2_name)
dense_layer2_wb = dense_layer2.get_weights()

dense_layer2_model = Model(inputs=model_raw.input,
outputs=model_raw.get_layer(dense_layer2_name).output)
dense_layer2_output = dense_layer2_model.predict(x_test, verbose=1)


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


統計情報を示す。

import numpy as np
dense_layer2_weight = dense_layer2_wb[0]
dense_layer2_bias = dense_layer2_wb[1]

print(dense_layer2_weight.shape)
print(dense_layer2_bias.shape)

print("dense_layer2_weight = {0}".format(dense_layer2_weight))
print("dense_layer2_bias = {0}".format(dense_layer2_bias))

print("np.max(dense_layer2_weight) = {0}".format(np.max(dense_layer2_weight)))
print("np.min(dense_layer2_weight) = {0}".format(np.min(dense_layer2_weight)))
abs_dense_layer2_weight = np.absolute(dense_layer2_weight)
print("np.max(abs_dense_layer2_weight) = {0}".format(np.max(abs_dense_layer2_weight)))
print("np.min(abs_dense_layer2_weight) = {0}".format(np.min(abs_dense_layer2_weight)))

print("np.max(dense_layer2_bias) = {0}".format(np.max(dense_layer2_bias)))
print("np.min(dense_layer2_bias) = {0}".format(np.min(dense_layer2_bias)))
abs_dense_layer2_bias = np.absolute(dense_layer2_bias)
print("np.max(abs_dense_layer2_bias) = {0}".format(np.max(abs_dense_layer2_bias)))
print("np.min(abs_dense_layer2_bias) = {0}".format(np.min(abs_dense_layer2_bias)))

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

abs_dense_layer2_output = np.absolute(dense_layer2_output)
print("np.max(abs_dense_layer2_output) = {0}".format(np.max(abs_dense_layer2_output)))
print("np.min(abs_dense_layer2_output) = {0}".format(np.min(abs_dense_layer2_output)))


(128, 10)
(10,)
dense_layer2_weight = [[-0.39988974 -0.12601139 -0.46622646 ... -0.44695276 -0.46335962
   0.13559648]
 [ 0.07339579 -0.45668814 -0.333825   ... -0.7270869   0.17933416
  -0.5707154 ]
 [ 0.06677974 -0.5544925   0.1668607  ... -0.46047652 -0.4375593
  -0.05378945]
 ...
 [-0.05012963 -0.112903   -0.1406179  ...  0.16494776  0.20007576
  -0.21182767]
 [-0.5350573  -0.40777698  0.19234389 ...  0.19444552 -0.33254635
  -0.54401803]
 [-0.52111495 -0.26989737  0.20298809 ...  0.08232445  0.14694539
  -0.36222363]]
dense_layer2_bias = [ 0.04120593  0.23183034  0.00655218 -0.07728817 -0.09058365 -0.0624351
 -0.14979938 -0.04618856 -0.06826726 -0.0130224 ]
np.max(dense_layer2_weight) = 0.39613091945648193
np.min(dense_layer2_weight) = -1.0431485176086426
np.max(abs_dense_layer2_weight) = 1.0431485176086426
np.min(abs_dense_layer2_weight) = 0.0008003973634913564
np.max(dense_layer2_bias) = 0.23183034360408783
np.min(dense_layer2_bias) = -0.1497993767261505
np.max(abs_dense_layer2_bias) = 0.23183034360408783
np.min(abs_dense_layer2_bias) = 0.00655217794701457
dense_layer2_output = (10000, 10)
np.std(dense_layer2_output) = 0.29531362652778625
np.max(dense_layer2_output) = 1.0
np.min(dense_layer2_output) = 3.318871697834195e-19
np.max(abs_dense_layer2_output) = 1.0
np.min(abs_dense_layer2_output) = 3.318871697834195e-19


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

# Dence layer2のweightのグラフ
dense_layer2_weight_f = dense_layer2_weight.flatten()
plt.plot(dense_layer2_weight_f)
plt.title('dense_layer2_weight')
plt.show()


keras_compressor_54_190307.png

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

# 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_55_190307.png
  1. 2019年03月07日 04:17 |
  2. DNN
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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