FC2カウンター FPGAの部屋 TensorFlow + Kerasを使ってみた8(全結合層の統計情報)

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

FPGAの部屋

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

TensorFlow + Kerasを使ってみた8(全結合層の統計情報)

TensorFlow + Kerasを使ってみた7(畳み込み層の統計情報)”の続き。

前回は、畳み込み層の最大値、最小値、絶対値の最大値、最小値、標準偏差などの統計情報を取得した。今回は、全結合層の統計情報を取得しよう。
なお、使用するのは MNIST の手書き数字を認識するCNN で畳み込み層の特徴マップの数は 10 個となっている。

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

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

dence_layer1_name = 'dense_5'

dence_layer1 = model.get_layer(dence_layer1_name)
dence_layer1_wb = dence_layer1.get_weights()

dence_layer1_model = Model(inputs=model.input,
                                 outputs=model.get_layer(dence_layer1_name).output)
dence_layer1_output = dence_layer1_model.predict(x_test, verbose=1)


表示を示す。

10000/10000 [==============================] - 2s 174us/step


重みとバイアスの配列の形状を取得した。

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

(1440, 100)
(100,)


全結合層1層目の重みとバイアスの最大値、最小値、絶対値の最大値、最小値を取得しよう。

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)))

np.max(dence_layer1_weight) = 0.287210673094
np.min(dence_layer1_weight) = -0.320384502411
np.max(abs_dence_layer1_weight) = 0.320384502411
np.min(abs_dence_layer1_weight) = 1.92374045582e-07
np.max(dence_layer1_bias) = 0.105059452355
np.min(dence_layer1_bias) = -0.0615252479911
np.max(abs_dence_layer1_bias) = 0.105059452355
np.min(abs_dence_layer1_bias) = 0.000534977589268


全結合層1層目の出力の標準偏差、最大値、最小値、絶対値の最大値、最小値を取得しよう。

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)))

dence_layer1_output = (10000, 100)
np.std(dence_layer1_output) = 3.02382802963
np.max(dence_layer1_output) = 14.2637271881
np.min(dence_layer1_output) = -13.8859920502
np.max(abs_dence_layer1_output) = 14.2637271881
np.min(abs_dence_layer1_output) = 4.04380261898e-06


全結合層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()


tensorflow_keras_47_180530.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()


tensorflow_keras_48_180530.png


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

# 2番目のDence layer2の中間出力を取り出す 
from keras.models import Model

dence_layer2_name = 'dense_6'

dence_layer2 = model.get_layer(dence_layer2_name)
dence_layer2_wb = dence_layer2.get_weights()

dence_layer2_model = Model(inputs=model.input,
                                 outputs=model.get_layer(dence_layer2_name).output)
dence_layer2_output = dence_layer2_model.predict(x_test, verbose=1)


表示を示す。

10000/10000 [==============================] - 2s 167us/step


重みとバイアスの配列の形状を取得した。

print(dence_layer2_weight.shape)
print(dence_layer2_bias.shape)

(100, 10)
(10,)


全結合層2層目の重みとバイアスの最大値、最小値、絶対値の最大値、最小値を取得しよう。

print("np.max(dence_layer2_weight) = {0}".format(np.max(dence_layer2_weight)))
print("np.min(dence_layer2_weight) = {0}".format(np.min(dence_layer2_weight)))
abs_dence_layer2_weight = np.absolute(dence_layer2_weight)
print("np.max(abs_dence_layer2_weight) = {0}".format(np.max(abs_dence_layer2_weight)))
print("np.min(abs_dence_layer2_weight) = {0}".format(np.min(abs_dence_layer2_weight)))
print("np.max(dence_layer2_bias) = {0}".format(np.max(dence_layer2_bias)))
print("np.min(dence_layer2_bias) = {0}".format(np.min(dence_layer2_bias)))
abs_dence_layer2_bias = np.absolute(dence_layer2_bias)
print("np.max(abs_dence_layer2_bias) = {0}".format(np.max(abs_dence_layer2_bias)))
print("np.min(abs_dence_layer2_bias) = {0}".format(np.min(abs_dence_layer2_bias)))

np.max(dence_layer2_weight) = 0.420090407133
np.min(dence_layer2_weight) = -0.625470399857
np.max(abs_dence_layer2_weight) = 0.625470399857
np.min(abs_dence_layer2_weight) = 0.000126185041154
np.max(dence_layer2_bias) = 0.0749695450068
np.min(dence_layer2_bias) = -0.0558836981654
np.max(abs_dence_layer2_bias) = 0.0749695450068
np.min(abs_dence_layer2_bias) = 0.00171886803582


全結合層2層目の出力の標準偏差、最大値、最小値、絶対値の最大値、最小値を取得しよう。

print("dence_layer2_output = {0}".format(dence_layer2_output.shape))
print("np.std(dence_layer2_output) = {0}".format(np.std(dence_layer2_output)))
print("np.max(dence_layer2_output) = {0}".format(np.max(dence_layer2_output)))
print("np.min(dence_layer2_output) = {0}".format(np.min(dence_layer2_output)))
abs_dence_layer2_output = np.absolute(dence_layer2_output)
print("np.max(abs_dence_layer2_output) = {0}".format(np.max(abs_dence_layer2_output)))
print("np.min(abs_dence_layer2_output) = {0}".format(np.min(abs_dence_layer2_output)))



dence_layer2_output = (10000, 10)
np.std(dence_layer2_output) = 9.34499263763
np.max(dence_layer2_output) = 30.0013465881
np.min(dence_layer2_output) = -35.2990074158
np.max(abs_dence_layer2_output) = 35.2990074158
np.min(abs_dence_layer2_output) = 0.000138353556395

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

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


tensorflow_keras_49_180530.png

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

# Dence layer2のbiasのグラフ
dence_layer2_bias_f = dence_layer2_bias.flatten()
plt.plot(dence_layer2_bias_f)
plt.title('dence_layer2_bias')
plt.show()


tensorflow_keras_50_180530.png
  1. 2018年05月30日 04:26 |
  2. TensorFlow, Keras
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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