从Keras Layer获得权重

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从Keras Layer获得权重相关的知识,希望对你有一定的参考价值。

我试图从以下Dense层获取权重:

x = Dense(1024)(Flatten()(previous_layer))

如果我尝试执行以下操作:

x = Dense(1024)
weights = x.get_weights()

这工作正常,但我的理解是这些权重将是无用的,因为我们没有向图层提供任何输入。

但是,如果我尝试执行以下操作:

x = Dense(1024)(Flatten()(previous_layer))
weights = x.get_weights()

这不起作用,因为x现在是Tensor对象,并没有get_weights方法:

'Tensor' object has no attribute 'get_weights'

我究竟做错了什么?

答案

图层(Dense(n))与将此图层应用于某个输入张量(Dense(n)(input))时得到的输出张量之间存在差异。您需要将图层存储在变量中,而不仅仅是输出张量:

>>> import keras
>>> input_layer = keras.layers.Input((2,))
>>> layer = keras.layers.Dense(3) # create a layer
>>> print(layer)
<keras.layers.core.Dense object at 0x7f03ca9d4d68>
>>> print(layer.get_weights()) # the layer does not have weights yet
[]
>>> output_tensor = layer(input_layer) # apply the layer to the input tensor
>>> print(output_tensor)
Tensor("dense_1/BiasAdd:0", shape=(?, 3), dtype=float32)
>>> print(layer.get_weights()) # now get the weights
[array([[-0.84973848, -0.19682372, -0.14602524],
       [ 0.70318353, -0.1578933 , -0.94751853]], dtype=float32),
 array([ 0.,  0.,  0.], dtype=float32)]

以上是关于从Keras Layer获得权重的主要内容,如果未能解决你的问题,请参考以下文章

Keras网络层之“关于Keras的层(Layer)”

自定义Keras Layer

Keras layer.weights 和 layer.get_weights() 给出不同的值

在 Keras 层中重置权重

什么时候在keras的源代码中调用了Layer.build()?

Keras 中的弹性权重合并算法实现