我试图在模型中的某一层上设置权重,但无济于事。
我在网上遵循了类似问题的解决方案,但似乎没有一个对我有用。变量“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.
尝试在设置权重之前构建图层 -
encoder.layers[0].build(w.shape)
然后
encoder.layers[0].set_weights([w])