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

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

FPGAの部屋

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

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

keras_compressor のモデルをVivado HLSで実装する1(model_raw.h5)”の続き。

前回は、ホストUbuntu 18.04 に 3 つのモデルをコピーして、まずは大きいので実装はできないと思う圧縮前のモデルのパラメータの内の畳み込み層第1層目のパラメータを見た。今回は、畳み込み層第2層目のパラメータを見てみよう。

最初に畳み込み層第2層目を見てみよう。

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

# Convolution layer2 の中間出力を取り出す dense
from keras.models import Modeldense
dense
conv_layer2_name = 'conv2d_2'dense
dense
conv_layer2 = model_raw.get_layer(conv_layer2_name)dense
conv_layer2_wb = conv_layer2.get_weights()dense
dense
conv_layer2_model = Model(inputs=model_raw.input,dense
                                 outputs=model_raw.get_layer(conv_layer2_name).output)dense
conv2_output = conv_layer2_model.predict(x_test, verbose=1)


10000/10000 [==============================] - 8s 765us/step


畳み込み層第2層目の重みやバイアスの配列の構成を見てみよう。

conv_layer2_weight = conv_layer2_wb[0]
conv_layer2_bias = conv_layer2_wb[1]

print(conv_layer2_weight.shape)
print(conv_layer2_weight.T.shape)
print(conv_layer2_bias.shape)


(3, 3, 32, 64)
(64, 32, 3, 3)
(64,)


重みの値を示す。

print("conv_layer2_weight.T = {0}".format(conv_layer2_weight.T))


conv_layer2_weight.T = [[[[ 0.01784169 -0.22131965 -0.16750205]
   [-0.2639166  -0.24390881 -0.1349165 ]
   [-0.22022615 -0.13424525  0.03606407]]

  [[ 0.00849118 -0.04595165  0.0551733 ]
   [-0.13494554 -0.09552263 -0.17330258]
   [ 0.0753931  -0.19278674 -0.11913268]]

  [[ 0.1441614   0.00560335 -0.03908797]
   [ 0.0333319   0.05042576 -0.08194944]
   [-0.07048219  0.02250148 -0.0651824 ]]

  ...

  [[ 0.05605402  0.09735671  0.08520151]
   [-0.08460605  0.03345596 -0.03969822]
   [-0.09354184 -0.11395966 -0.2386213 ]]

  [[ 0.07731646  0.10309629 -0.05285215]
   [ 0.01115145  0.05118542 -0.03705103]
   [-0.08374058 -0.10000117 -0.13344261]]

  [[-0.21285664 -0.07637326 -0.11807112]
   [-0.0872641  -0.09507918 -0.02423166]
   [-0.11540057 -0.08176904 -0.06490589]]]


 [[[ 0.07252679  0.06954905  0.12537089]
   [-0.03229538  0.03017478 -0.04630463]
   [ 0.02097548 -0.02660633  0.00960674]]

  [[ 0.12599792  0.10061093 -0.14380467]
   [ 0.15743831  0.05114197 -0.2771658 ]
   [ 0.0689197  -0.13323346 -0.2662513 ]]

  [[ 0.08159676 -0.13551575 -0.3436229 ]
   [ 0.03267855  0.06596102 -0.3013157 ]
   [-0.03452173 -0.13858531 -0.16072227]]

  ...

  [[-0.03201892 -0.00297785  0.0185745 ]
   [-0.00817327  0.09832835  0.06953567]
   [ 0.17358212  0.0870876  -0.02251608]]

  [[-0.16763942 -0.3161246  -0.14865172]
   [-0.12597817 -0.3417036  -0.15690652]
   [ 0.04152744 -0.12624545 -0.11262694]]

  [[-0.10200371  0.07960378  0.05031039]
   [-0.02846055 -0.08170375  0.12832679]
   [ 0.09110897  0.03700143 -0.01683243]]]


 [[[-0.01097492  0.02248521  0.16480623]
   [ 0.02680427 -0.08301172  0.0185292 ]
   [-0.11983979 -0.1192525  -0.06802542]]

  [[-0.04117574  0.04049781 -0.13980682]
   [-0.07642376  0.10412158  0.03532882]
   [ 0.07239848  0.07695939 -0.06664034]]

  [[ 0.10669465  0.11727943 -0.08763045]
   [ 0.05561309  0.03903994 -0.11831472]
   [-0.02032233 -0.04828302  0.04822908]]

  ...

  [[-0.06403774 -0.01820614  0.00787074]
   [-0.05458642 -0.02513286 -0.03289285]
   [-0.14240177 -0.10622517 -0.14554805]]

  [[-0.00132929 -0.01552058 -0.0673898 ]
   [ 0.06745421  0.02022707 -0.1390137 ]
   [-0.00278586 -0.01311766 -0.08565197]]

  [[-0.07402381  0.12787989  0.09319225]
   [-0.00096143  0.02168931  0.03331943]
   [-0.00968612  0.03589568  0.02383618]]]


 ...


 [[[ 0.0018453  -0.13253921 -0.12945914]
   [-0.06278129 -0.07392175 -0.14944914]
   [-0.11052338 -0.23914535 -0.22029497]]

  [[ 0.02723508 -0.05506902 -0.04423543]
   [ 0.1670157   0.06717188  0.11392233]
   [ 0.01090579  0.00986434 -0.12726213]]

  [[-0.07041598  0.04368603 -0.0439879 ]
   [ 0.0517549  -0.0583111  -0.03284019]
   [-0.01574312  0.01930327  0.09448915]]

  ...

  [[ 0.08875347  0.05630978 -0.00529092]
   [-0.0304523   0.04554279 -0.05971542]
   [ 0.02514045  0.04610986  0.04479846]]

  [[ 0.06760995 -0.05780705  0.0778336 ]
   [-0.05120533 -0.00925362  0.1131255 ]
   [ 0.1042031  -0.02880889  0.16454437]]

  [[-0.06327637 -0.07312059 -0.07421203]
   [-0.00637156 -0.10024032 -0.2086502 ]
   [-0.01108299 -0.11301193 -0.11094074]]]


 [[[-0.14215174 -0.05250412 -0.0090812 ]
   [-0.0928833  -0.12365779  0.21822254]
   [-0.09645115 -0.28084764  0.16772458]]

  [[-0.10625021  0.06715798  0.13000865]
   [-0.09430328 -0.00373708  0.08581509]
   [-0.3111424  -0.12384682 -0.04418406]]

  [[-0.13106433 -0.07839978 -0.18065412]
   [-0.06607336  0.08278285 -0.02248873]
   [ 0.12788951  0.16163033  0.0536258 ]]

  ...

  [[-0.34901655 -0.10141616 -0.02693314]
   [-0.2983937  -0.15410991  0.07247194]
   [-0.09468765 -0.1493755  -0.01842348]]

  [[-0.11536116 -0.19297424  0.06110919]
   [-0.03551681  0.03248382  0.02823978]
   [-0.02293781  0.01535376 -0.10231322]]

  [[ 0.10867406  0.00733983 -0.02937514]
   [ 0.05518444  0.02402998  0.02671161]
   [ 0.1154867   0.06526493  0.07580288]]]


 [[[ 0.05041484  0.085272    0.08250518]
   [-0.0907499   0.0033332   0.09291119]
   [-0.12325586 -0.05949372  0.03192182]]

  [[ 0.06377354  0.04935758  0.04397005]
   [ 0.05296668  0.02406436  0.05589819]
   [-0.07718782 -0.13519521 -0.20206876]]

  [[-0.08898731 -0.07421607 -0.0766596 ]
   [ 0.02380313  0.03121348  0.04296595]
   [-0.07588881 -0.11828827  0.09910108]]

  ...

  [[ 0.01745879 -0.05311462 -0.07193764]
   [ 0.0888538  -0.04104587 -0.03298815]
   [-0.01826777 -0.27299204 -0.1160126 ]]

  [[-0.03162678 -0.1756806  -0.03228816]
   [ 0.0256981   0.08202723  0.01641914]
   [ 0.0224688  -0.08321954 -0.11221529]]

  [[ 0.16707096  0.000507    0.04078325]
   [-0.05756345 -0.21379665  0.00349825]
   [-0.00337872 -0.14029837 -0.04840912]]]]


バイアスの値を示す。

print("conv_layer_bias = {0}".format(conv_layer2_bias))


conv_layer_bias = [-0.03850411 -0.01573794 0.01115942 0.00562205 -0.03604732 0.01286564
-0.09528935 -0.04337158 -0.01698404 -0.05879769 -0.03624293 -0.08855402
-0.04848624 -0.03195901 -0.08869974 0.00507461 -0.07211261 -0.05120531
-0.07258753 -0.02589275 0.00240357 -0.03014836 -0.07204135 -0.01561245
-0.03739467 -0.04205899 -0.06722149 0.00948338 -0.03016038 -0.02061644
-0.05402645 0.14428563 -0.05207796 -0.05976514 -0.04870901 0.00583873
-0.00821861 -0.0367915 -0.04091152 -0.0452308 0.01322065 -0.0670034
-0.03599038 -0.06793729 -0.07481442 -0.06112335 -0.00378744 -0.06627614
-0.07054048 0.02497522 -0.03339541 -0.02779962 -0.06606241 -0.0774965
-0.02701756 -0.02294137 -0.06889407 -0.03851727 -0.01658753 0.01253654
-0.06667125 -0.0335856 0.00278443 -0.04023726]


統計情報を示す。

import numpy as np

print("np.max(conv_layer2_weight) = {0}".format(np.max(conv_layer2_weight)))
print("np.min(conv_layer2_weight) = {0}".format(np.min(conv_layer2_weight)))
abs_conv_layer2_weight = np.absolute(conv_layer2_weight)
print("np.max(abs_conv_layer2_weight) = {0}".format(np.max(abs_conv_layer2_weight)))
print("np.min(abs_conv_layer2_weight) = {0}".format(np.min(abs_conv_layer2_weight)))

print("np.max(conv_layer2_bias) = {0}".format(np.max(conv_layer2_bias)))
print("np.min(conv_layer2_bias) = {0}".format(np.min(conv_layer2_bias)))
abs_conv_layer2_bias = np.absolute(conv_layer2_bias)
print("np.max(abs_conv_layer2_bias) = {0}".format(np.max(abs_conv_layer2_bias)))
print("np.min(abs_conv_layer2_bias) = {0}".format(np.min(abs_conv_layer2_bias)))

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

abs_conv2_output = np.absolute(conv2_output)
print("np.max(abs_conv) = {0}".format(np.max(abs_conv2_output)))
print("np.min(abs_conv) = {0}".format(np.min(abs_conv2_output)))


np.max(conv_layer2_weight) = 0.411957323551178
np.min(conv_layer2_weight) = -0.45342838764190674
np.max(abs_conv_layer2_weight) = 0.45342838764190674
np.min(abs_conv_layer2_weight) = 3.3898611491167685e-06
np.max(conv_layer2_bias) = 0.1442856341600418
np.min(conv_layer2_bias) = -0.09528934955596924
np.max(abs_conv_layer2_bias) = 0.1442856341600418
np.min(abs_conv_layer2_bias) = 0.002403571968898177
conv2_output = (10000, 24, 24, 64)
np.std(conv2_output) = 0.07447987049818039
np.max(conv2_output) = 2.7997069358825684
np.min(conv2_output) = 0.0
np.max(abs_conv) = 2.7997069358825684
np.min(abs_conv) = 0.0


畳み込み層 2 層目の重みのグラフ。

%matplotlib inline
import pandas as pd
import matplotlib.pyplot as plt

# Convolution layer2のweightのグラフ
conv_layer2_weight_f = conv_layer2_weight.flatten()
plt.plot(conv_layer2_weight_f)
plt.title('conv_layer2_weight')
plt.show()


keras_compressor_50_190305.png

畳み込み層 2 層目のバイアスのグラフ。

# Convolution layer2のbiasのグラフ
conv_layer2_bias_f = conv_layer2_bias.flatten()
plt.plot(conv_layer2_bias_f)
plt.title('conv_layer2_bias')
plt.show()


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

コメント

コメントの投稿


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

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