tensorflow - 从 Keras 层获取权重

标签 tensorflow machine-learning neural-network deep-learning keras

我正在尝试从以下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”对象没有属性“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)]

关于tensorflow - 从 Keras 层获取权重,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49029105/

相关文章:

android - 如何在Android中运行Conv3D模型?

machine-learning - TensorBoard - 在同一张图上绘制训练和验证损失?

machine-learning - 当真正的阳性结果很少见时

machine-learning - 无需训练值的神经网络学习

python - 无法在python3中导入tensorflow并出现ImportError : This package should not be accessible on Python 3

python-3.x - tensorflow 2 api回归tensorflow.python.framework.ops.EagerTensor'对象不可调用

python - TensorFlow, tf.reshape 导致 "Gradients do not exist for variables"

python - 线性回归实现中的问题

python - 如何在 tensorflow 中使用相同的权重进行初始化?

r - 使用nnet预测股价