如何在非Sequential()Keras模型层中设置权重和渐变权重

时间:2019-06-25 19:05:28

标签: python-3.x tensorflow keras keras-layer

我有一些经过预先训练的权重(包括层和渐变的权重)作为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

0 个答案:

没有答案