如何在预训练的Keras CNN模型中更改层的形状?

时间:2019-12-28 05:43:27

标签: python tensorflow keras deep-learning conv-neural-network

我想将灰度图像应用于预先训练的Keras CNN。而不是将图像复制到所有三个通道,我试图通过对输入通道的维度上的权重求和来修改模型的第一卷积层。

我正在使用以下代码来获取第一卷积层的权重,对输入通道的尺寸求和,然后重新分配第一卷积层的权重。

w = model_base.layers[1].get_weights()
w = w[0]
new_weights = [w.sum(axis=2).reshape(w.shape[0], w.shape[1], 1, w.shape[-1])]
model_base.layers[1].set_weights(new_weights)

但是,当我尝试这样做时,我得到一个错误,即新配重的形状(3、3、3、48)与提供的配重形状(3、3、1、48)不兼容。我还尝试使用以下代码设置图层的形状。

new_shape = tf.TensorShape([3, 3, 1, 48])
model_base.layers[1].weights[0].set_shape(new_shape)

这也不起作用。任何帮助将不胜感激。

这类似于问题(How can I use a pre-trained neural network with grayscale images?),其中有人展示了如何在PyTorch中实现此想法。我试图弄清楚如何在不同的框架Keras + Tensorflow中实现这一点。

0 个答案:

没有答案