スポンサーリンク

Tensorflow 2のKerasで重みの取得と設定(1)

Kerasで作ったモデルのノードそれぞれの重みを取得するにはget_weights、設定するにはset_weightsを使用する。

import tensorflow as tf
import numpy as np

# Define the model.
model = tf.keras.models.Sequential([
    tf.keras.layers.Input(shape=(1,)),
    tf.keras.layers.Dense(2, activation='linear')
])

print("----------------")

# レイヤー0の重み取得
L0w = model.layers[0].get_weights()

# 取得時の重みを表示
print("default weight 0", L0w )

print("----------------")

# 重みを書き換え
L0w[0][0][0] = 1.0
L0w[0][0][1] = 2.0

# 重みをモデルにセット
model.layers[0].set_weights(L0w)

# モデルの重みが更新されていることを確認
print("edited  weight 0", model.layers[0].get_weights() )

print("----------------")
print( " 0番 output の値" )
for n in range(0,5):
	predict_y = model.predict( np.array( [[n]] ) )
	print( n ,"→ f →" , predict_y[0][0] )

print("--------------------")
print( " 1番 output の値" )
for n in range(0,5):
	predict_y = model.predict( np.array( [[n]] ) )
	print( n ,"→ f →" , predict_y[0][1] )

出力

----------------
default weight 0 [array([[-1.1593556 , 0.38860273]], dtype=float32), array([0., 0.], dtype=float32)]
----------------
edited weight 0 [array([[1., 2.]], dtype=float32), array([0., 0.], dtype=float32)]
----------------
0番 output の値
0 → f → 0.0
1 → f → 1.0
2 → f → 2.0
3 → f → 3.0
4 → f → 4.0
--------------------
1番 output の値
0 → f → 0.0
1 → f → 2.0
2 → f → 4.0
3 → f → 6.0
4 → f → 8.0

やっていること

まずモデルを作る。

# Define the model.
model = tf.keras.models.Sequential([
    tf.keras.layers.Input(shape=(1,)),
    tf.keras.layers.Dense(2, activation='linear')
])

次にモデルの重みを取得する

# レイヤー0の重み取得
L0w = model.layers[0].get_weights()

するとどうやら、図のような関係になっているらしい。

ので、書き換えてモデルを更新する。

# 重みを書き換え
L0w[0][0][0] = 1.0
L0w[0][0][1] = 2.0

# 重みをモデルにセット
model.layers[0].set_weights(L0w)

するとこんな関係になる。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: