Keras get_weights()返回空

时间:2017-11-04 02:37:25

标签: python machine-learning tensorflow keras

我正在自学数据科学,一些奇特的东西引起了我的注意。在我正在研究的示例DNN教程中,我发现Keras layer.get_weights()函数返回了我的变量的空列表。我已成功交叉验证并使用model.fit()函数计算召回分数。

但是当我尝试在我的分类变量上使用get_weights()函数时,它会为所有人返回空权重。

我不是在寻找代码的解决方案,但我只是对可能导致这种情况的原因感到好奇。我已经阅读了Keras API,但它没有向我提供我希望看到的信息。什么可能导致keras中的get_weights()函数返回空列表,当然除了未设置权重?

2 个答案:

答案 0 :(得分:1)

也可能是,您试图从没有任何权重的层中获取权重。假设您已经定义了以下模型:

input = Input(shape=(4,))
hidden_layer_0 = Dense(4, activation='tanh')(input)
hidden_layer_1 = Dense(4, activation='tanh')(hidden_layer_0)
output = Lambda(lambda t: l2_normalize(100000*t, axis=1))(hidden_layer_1)

model = Model(input, output)

并且想要打印每层的权重(在之前构建/训练之后)。您可以按如下方式执行此操作:

for layer in model.layers:
    print("===== LAYER: ", layer.name, " =====")
    if layer.get_weights() != []:
        weights = layer.get_weights()[0]
        biases = layer.get_weights()[1]
        print("weights:")
        print(weights)
        print("biases:")
        print(biases)
    else:
        print("weights: ", [])

如果你运行这段代码,你会得到这样的结果:

===== LAYER:  input_1  =====
weights:  []
===== LAYER:  dense  =====
weights:
[[-6.86365739e-02  2.24897027e-01  ...  1.90570995e-01]]
biases:
[-0.02512692  -0.00486927  ...  0.04254978]
===== LAYER:  dense_1  =====
weights:
[[-6.86365739e-02  2.24897027e-01  ...  1.90570995e-01]]
biases:
[-0.02512692  0.00933884 ...  0.04254978]
===== LAYER:  lambda  =====
weights:  []

如您所见,第一个 (Input) 和最后一个 (Lambda) 层没有任何权重。

答案 1 :(得分:0)

也许您在创建权重之前要求它。

  

首次在输入上调用模型时创建权重,或者   build()input_shape一起调用。

例如,如果您从检查点加载权重,但没有给模型提供input_shape,则get_weights()将返回一个空列表。