首页 > 解决方案 > 如何在预训练的 Keras CNN 模型中更改图层的形状?

问题描述

我想将灰度图像应用于预训练的 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 中实现这一点。

标签: pythontensorflowkerasdeep-learningconv-neural-network

解决方案


推荐阅读