我有一些经过预先训练的权重(包括层和渐变的权重)作为Numpy数组,我需要将它们设置在重新创建的网络中。
部分网络示例:
Text( MaterialLocalizations.of(context).okButtonLabel )
我应该在Conv2D图层中设置的权重的np.array具有以下形状: X_input = Input((4,256,256))
# batchSize is 4
# size so far: (batchSize,4,256,256)
X = Conv2D(96,(11,11), strides=(4,4), data_format = 'channels_first')(X_input)
# output of the convolution has size: (batchSize, 96, 62, 62)
X = BatchNormalization(axis = 1)(X)
X = Activation('relu')(X)
X = MaxPooling2D((3, 3), strides=(2, 2), data_format='channels_first')(X)
我实际上可以像使用Sequential()模型一样调用set_weights()函数:
(96, 4, 11, 11)
但是,如果这样做,则会出现错误:
model.get_layer('layerName').set_weights(myNpArrayWeights)
好像形状不正确吗?
因此,我尝试使用ValueError: You called `set_weights(weights)` on layer "step2_conv1" with a
weight list of length 96, but the layer was expecting 2 weights.
Provided weights: [[[[ 3.87499551e-03 1.32818555e-03 2.97062146e-0...
输入2个测试权重。
这是报告的错误:
np.array([1,2])
我该如何解决?
如何设置渐变的权重?
Python版本:3.6.5
Keras版本:2.2.4
Tensorflow版本:1.13.1
对于第一个ValueError:
在Conv2D图层中设置ValueError: Fetch argument <tf.Variable 'step2_conv1_4/kernel:0'
shape=(11, 11, 4, 96) dtype=float32_ref> cannot be interpreted as a Tensor.
(Tensor Tensor("step2_conv1_4/kernel:0", shape=(11, 11, 4, 96), dtype=float32_ref)
is not an element of this graph.)
,以便它仅期望1个权重数组,如果use_bias设置为True,则将在该层中考虑其他权重数组。
第二个ValueError:
在实例化模型之前,有必要清除会话,因为您可能多次运行模型(就像我一样),并且显然Tensorflow对存在的多个图感到困惑。
要清理会话运行:
use_bias=False