web-dev-qa-db-ja.com

Kerasシーケンシャルモデルでバイアスの重みを抽出する方法は?

Kerasを使用して、単純なフィードフォワードネットワークを実行しています。隠れたレイヤーが1つしかないので、各入力と各出力の関連性について推論を行い、重みを抽出したいと思います。

これはモデルです:

def build_model(input_dim, output_dim):
    n_output_layer_1 = 150
    n_output = output_dim
    model = Sequential()
    model.add(Dense(n_output_layer_1, input_dim=input_dim, activation='relu'))
    model.add(Dropout(0.25))
    model.add(Dense(n_output))

私が書いた重量を抽出するには:

for layer in model.layers:
    weights = layer.get_weights() 


weights = np.array(weights[0])     #this is hidden to output
first = model.layers[0].get_weights() #input to hidden
first = np.array(first[0])

残念ながら、行列内のバイアス列を取得できません。これはKerasが自動的に入力することを知っています。

バイアスの重みを取得する方法を知っていますか?

よろしくお願いします!

14

高密度レイヤーのget_weights()は、2つの要素のリストを返します。最初の要素には重みが含まれ、2番目の要素にはバイアスが含まれます。だからあなたは簡単に行うことができます:

weights = model.layers[0].get_weights()[0]
biases = model.layers[0].get_weights()[1]

重みとバイアスはすでにnumpy配列であることに注意してください。

26