如何从模型中获得权重和偏见?

时间:2019-07-02 14:52:18

标签: python keras

我有一个简单的神经网络,我需要从模型中获得权重和偏差。我已经尝试了一些之前讨论过的方法,但是我不断遇到超出范围的值错误。不知道如何解决这个问题,或者我所缺少的。

网络-

model = keras.Sequential([
    keras.layers.Flatten(input_shape=(28, 28)),
    keras.layers.Dense(128, activation=tf.nn.relu),
    keras.layers.Dense(10, activation=tf.nn.softmax)
])

model.layers[0].get_weights()[1]

错误- IndexError: list index out of range

这是在几个问题中提到的内容,但是最终我得到了超出范围的错误。

我还有一个问题,model.layers[]之后的索引,它对应于图层吗? 例如model.layers[1]给出对应于第二层的权重,像这样吗?

4 个答案:

答案 0 :(得分:1)

模型中的第一层(索引0)是[-] Android toolchain - develop for Android devices • Android SDK at D:\Android\sdk ✗ Android SDK is missing command line tools; download from https://developer.android.com/studio/index.html#downloads • Try re-installing or updating your Android SDK, visit https://flutter.dev/setup/#android-setup for detailed instructions. 层,它没有任何权重,这就是为什么会出错的原因。

要获得第二层Flatten层,必须使用索引1:

Dense

答案 1 :(得分:0)

我去过那里,我一直在查看我的旧代码,看是否能记得我是如何解决该问题的。 我要做的是打印model.layer[index].get_weights()[X]的长度,以找出keras在节省我所需的重量。 在我的旧代码中,model.layers[0].get_weights()[1]将返回偏差,而model.layers[0].get_weights()[0]将返回实际权重。 无论如何,请考虑到某些图层没有保存权重(因为它们没有权重),因此如果请求model.layers[0].get_weights()[0]不起作用,请尝试使用model.layers[1].get_weights()[1],因为我不确定平坦的图层,但是我知道密集的图层可以减轻重量。

答案 2 :(得分:0)

examples,您将获得模型的所有权重和偏差

答案 3 :(得分:0)

要获得 Keras 序列和每次迭代的权重和偏差,您可以按照下一个示例进行操作:

# create model
model = Sequential()
model.add(Dense(numHiddenNeurons, activation="tanh", input_dim=4, kernel_initializer="uniform"))
model.add(Dense(1, activation="linear", kernel_initializer="uniform"))
# Compile model
model.compile(loss='mse', optimizer='adam', metrics=['accuracy', 'mse', 'mae', 'mape'])
weightsBiasDict = {}
    
weightAndBiasCallback = tf.keras.callbacks.LambdaCallback \
            (on_epoch_end=lambda epoch, logs: weightsBiasDict.update({epoch:model.get_weights()}))
    
# Fit the model
history= model.fit(X1, Y1, epochs=numIterations, batch_size=batch_size,  verbose=0, callbacks=weightAndBiasCallback)

对于字典 weightsBiasDict

的每次迭代都可以访问权重和偏差

如果您在训练结束时只需要权重和偏差值,您可以使用 model.layer[index].get_weights()[0] 用于权重 和 model.layer[index].get_weights()[1] 表示偏见 其中 index 是网络上的层编号,输入层从零开始。