我试图从下面的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) # 创建一个层>>> print(layer)<keras.layers.core.Dense object at 0x7f03ca9d4d68>>> print(layer.get_weights()) # 该层尚未有权重[]>>> output_tensor = layer(input_layer) # 将层应用于输入张量>>> print(output_tensor)Tensor("dense_1/BiasAdd:0", shape=(?, 3), dtype=float32)>>> print(layer.get_weights()) # 现在获取权重[array([[-0.84973848, -0.19682372, -0.14602524], [ 0.70318353, -0.1578933 , -0.94751853]], dtype=float32), array([ 0., 0., 0.], dtype=float32)]