当前位置: 首页 > 知识库问答 >
问题:

我如何从Keras的一个经过培训的模型中获得偏差?

邹时铭
2023-03-14

我建立了一个简单的神经网络,

model = Sequential()
model.add(Dense(20, input_dim=5, activation='sigmoid'))
model.add(Dense(1, activation='sigmoid'))

我可以通过以下方式获得其重量:

summary = model.summary()
W_Input_Hidden = model.layers[0].get_weights()[0]
W_Output_Hidden = model.layers[1].get_weights()[0]

print(summary)
print('INPUT-HIDDEN LAYER WEIGHTS:')
print(W_Input_Hidden)
print('HIDDEN-OUTPUT LAYER WEIGHTS:')
print(W_Output_Hidden)

但是,通过这种方式,我只得到了没有偏差的权重矩阵(5x20,1x20)。如何获取偏差值?

共有3个答案

范哲
2023-03-14

可以使用以下代码查看和输出偏差和权重:

for layer in model.layers:
    g=layer.get_config()
    h=layer.get_weights()
    print (g)
    print (h)

如果要从验证数据集中查找权重和偏差,则需要对数据集中的每个向量执行model.predict

   for i in range(len(valData)):
        ValResults = model.predict(valData[i])
        B_Input_Hidden = model.layers[0].get_weights()[1]
        B_Output_Hidden = model.layers[1].get_weights()[1]
冷翼
2023-03-14

这是一个完整的工作示例(使用TensorFlow 2和Keras实现)。

import tensorflow as tf
import numpy as np


def get_model():
    inp = tf.keras.layers.Input(shape=(1,))
    # Use the parameter bias_initializer='random_uniform'
    # in case you want the initial biases different than zero.
    x = tf.keras.layers.Dense(8)(inp)
    out = tf.keras.layers.Dense(1)(x)
    model = tf.keras.models.Model(inputs=inp, outputs=out)
    return model


def main():
    model = get_model()
    model.compile(loss="mse")

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

    print("initial weights =", weights)
    print("initial biases =", biases)

    X = np.random.randint(-10, 11, size=(1000, 1))
    y = np.random.randint(0, 2, size=(1000, 1))

    model.fit(X, y)

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

    print("learned weights =", weights)

    # Biases are similar because they are all initialized with zeros (by default).
    print("learned biases =", biases)


if __name__ == '__main__':
    main()
柳镜
2023-03-14

很简单,它只是get_weights()返回的数组中的第二个元素(对于密集层):

B_Input_Hidden = model.layers[0].get_weights()[1]
B_Output_Hidden = model.layers[1].get_weights()[1]
 类似资料:
  • 问题内容: 我想知道是否有可能保存经过部分训练的Keras模型并在再次加载模型后继续进行训练。 这样做的原因是,将来我将拥有更多的训练数据,并且我不想再次对整个模型进行训练。 我正在使用的功能是: 编辑1:添加了完全正常的示例 对于10个纪元后的第一个数据集,最后一个纪元的损失将为0.0748,精度为0.9863。 保存,删除和重新加载模型后,第二个数据集上训练的模型的损失和准确性分别为0.171

  • 我想训练自己的自定义模型。我可以从哪里开始? 我使用这个样本数据来训练一个模型: 基本上,我想从给定的输入中找出一些无意义的文本。 我尝试了opennlp开发文档中给出的以下示例代码,但出现了错误:Model与name finder不兼容!

  • 我想使用Apache OpenNLP为我的母语乌尔都语训练NER模型。我已经准备好了中的训练数据。制作训练模型(. bin)的下一步是什么,就像我们在模型下载部分的OpenNLP站点上找到的那样。

  • 我有一个模型。预训练的pkl文件以及与ml模型相关的所有其他文件。我想把它部署到aws sagemaker上。但是在没有培训的情况下,如何将其部署到aws sagmekaer,就像aws sagemaker中的fit()方法一样,运行train命令并推送模型。焦油gz到s3位置,当使用deploy方法时,它使用相同的s3位置来部署模型,我们不会在s3中手动创建与aws模型创建的位置相同的位置,并使

  • 我的代码是: 我的数据如下: 我的结果是: 两个时代后它就卡在那里了。我能做些什么来防止它这么快卡住?

  • 我想在SageMaker找一份当地的培训工作。 根据这个AWS笔记本(https://github.com/awslabs/amazon-sagemaker-examples/blob/master/sagemaker-python-sdk/mxnet_gluon_mnist/mxnet_mnist_with_gluon_local_mode.ipynb),我能够在本地进行训练和预测。 有没有办法