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] )
まずモデルを作る。
# 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)
するとこんな関係になる。