python - 如何在预训练的 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 中实现这一点。
解决方案
推荐阅读
- javascript - 如何将 PanResponder 与动画值一起使用?
- asp.net - 与 Azure AD 集成在 Azure IAAS 上托管的 .net 应用程序的相同站点问题
- reactjs - 如何通过 package.json 文件中的配置设置来设置 python 版本?
- python - 如何在 django 模型中存储条件语句变量?
- tensorflow.js - 你可以在运行 TensorFlow 时用 expo-camera 录制视频吗?
- python - 如何将换行符后面的字符串的第一个字母大写?
- typescript - 打字稿:重用类中接口的属性
- jquery - 我不能使用 $(this) Jquery
- flutter - 如何在颤动中删除选定的文本小部件?
- xamarin - Xamarin - 如何查看 iOS 模拟器应用程序日志