【问题标题】:How to get the values of weights and biases of keras layer?如何获得keras层的权重和偏差值?
【发布时间】:2019-11-18 13:36:54
【问题描述】:

为了让我的问题更清楚,我在这里写了一段代码:

from keras.layers import Input, Dense
from keras.models import Model
import numpy as np

features = np.random.normal(0, 1, (1000, 3))
labels = np.sum(features, axis=1)
print(features.shape, labels.shape)

input_layer = Input(shape=(3,))
dense_layer_1 = Dense(units=10, activation='sigmoid')
dense_layer_1_output = dense_layer_1(input_layer)
dense_layer_2 = Dense(units=1, activation='linear')
dense_layer_2_output = dense_layer_2(dense_layer_1_output)

model = Model(input_layer, dense_layer_2_output)
model.compile(optimizer='adam', loss='mean_squared_error')
model.fit(features, labels, batch_size=32, epochs=20, verbose=2, validation_split=.2)

我的问题是:如何获取和打印这两个 Dense 层的权重和偏差值?

【问题讨论】:

    标签: python keras keras-layer


    【解决方案1】:

    您可以简单地使用以下代码来获取这两个密集层的权重和偏差:

    for layer in model.layers:
        print(layer.name)
        w, b = layer.get_weights()
        print(w, b)
    

    代码:

    input_layer = Input(shape=(3,))
    dense_layer_1 = Dense(units=10, activation='sigmoid', name='dense_layer_1')
    dense_layer_1_output = dense_layer_1(input_layer)
    dense_layer_2 = Dense(units=1, activation='linear',  name='dense_layer_2')
    dense_layer_2_output = dense_layer_2(dense_layer_1_output)
    
    model = Model(input_layer, dense_layer_2_output)
    model.compile(optimizer='adam', loss='mean_squared_error')
    model.fit(features, labels, batch_size=32, epochs=20, verbose=2, validation_split=.2)
    
    for layer in model.layers[1:]:
        print(layer.name)
        w, b = layer.get_weights()
        print(w, b)
    

    【讨论】:

      【解决方案2】:

      如上所述here

      如果你想得到所有层的权重和偏差,你可以简单地使用:

      for layer in model.layers: print(layer.get_config(), layer.get_weights())
      

      如果你希望权重直接返回为 numpy 数组,你可以使用:

      first_layer_weights = model.layers[0].get_weights()[0]
      first_layer_biases  = model.layers[0].get_weights()[1]
      second_layer_weights = model.layers[1].get_weights()[0]
      second_layer_biases  = model.layers[1].get_weights()[1]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-20
        • 2020-02-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多