我正在自学数据科学,一些奇特的东西引起了我的注意。在我正在研究的示例DNN教程中,我发现Keras layer.get_weights()
函数返回了我的变量的空列表。我已成功交叉验证并使用model.fit()
函数计算召回分数。
但是当我尝试在我的分类变量上使用get_weights()
函数时,它会为所有人返回空权重。
我不是在寻找代码的解决方案,但我只是对可能导致这种情况的原因感到好奇。我已经阅读了Keras API,但它没有向我提供我希望看到的信息。什么可能导致keras中的get_weights()
函数返回空列表,当然除了未设置权重?
答案 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()
将返回一个空列表。