ValueError:在层“conv2d_7”上调用“set_weights(权重)”,权重列表长度为2,但该层期望1个权重

问题描述 投票:0回答:1

我试图在模型中的某一层上设置权重,但无济于事。

我在网上遵循了类似问题的解决方案,但似乎没有一个对我有用。变量“w”(如下面的代码所示)的结构为[numpy array, numpy array]。第一个的大小为 (3, 3, 3, 64),第二个的形状为 (64,)。我想实现与 tf 2.X 中“权重”kwarg 类似的功能,但似乎无法让它工作。这是我的代码:

encoder = Sequential()
encoder.add(layers.Conv2D(64, (3, 3), activation='relu', padding='same', use_bias=False, input_shape=(SIZE, SIZE, 3)))
w = model.layers[0].get_weights()
encoder.layers[0].set_weights([w])
encoder.add(layers.MaxPooling2D((2, 2), padding='same'))
encoder.add(layers.Conv2D(32, (3, 3), activation='relu', padding='same', weights=model.layers[2].get_weights()))
encoder.add(layers.MaxPooling2D((2, 2), padding='same'))
encoder.add(layers.Conv2D(16, (3, 3), activation='relu', padding='same', weights=model.layers[4].get_weights()))
encoder.add(layers.MaxPooling2D((2, 2), padding='same'))
encoder.summary()

错误:

ERROR: ValueError: You called `set_weights(weights)` on layer 'conv2d_7' with 
a weight list of length 2, but the layer was expecting 1 weights.
python tensorflow machine-learning keras
1个回答
0
投票

尝试在设置权重之前构建图层 -

encoder.layers[0].build(w.shape)
然后
encoder.layers[0].set_weights([w])

© www.soinside.com 2019 - 2024. All rights reserved.