python - 预训练的 Keras Inception 中没有形状与训练后要求的形状
问题描述
我正在尝试使用 Keras InceptionV3() 使用Lucid Toolkit ( https://github.com/tensorflow/lucid ) 执行特征可视化。
当我在训练后检查网络内层的形状时,它们具有给定的形状:
================================================================================
input_1 (InputLayer) (None, 300, 400, 3) 0
__________________________________________________________________________________________________
conv2d_1 (Conv2D) (None, 149, 199, 32) 864 input_1[0][0]
__________________________________________________________________________________________________
batch_normalization_1 (BatchNor (None, 149, 199, 32) 96 conv2d_1[0][0]
__________________________________________________________________________________________________
activation_1 (Activation) (None, 149, 199, 32) 0 batch_normalization_1[0][0]
__________________________________________________________________________________________________
conv2d_2 (Conv2D) (None, 147, 197, 32) 9216 activation_1[0][0]
...
相比之下,具有预训练 imageNet-weights 的模型没有这样的限制:
input_1 (InputLayer) (None, None, None, 3 0
__________________________________________________________________________________________________
conv2d_1 (Conv2D) (None, None, None, 3 864 input_1[0][0]
__________________________________________________________________________________________________
batch_normalization_1 (BatchNor (None, None, None, 3 96 conv2d_1[0][0]
__________________________________________________________________________________________________
activation_1 (Activation) (None, None, None, 3 0 batch_normalization_1[0][0]
__________________________________________________________________________________________________
conv2d_2 (Conv2D) (None, None, None, 3 9216 activation_1[0][0]
所以,问题是,当我想执行可视化时,使用预训练的网络它可以工作,但我的却不行。
有谁知道,为什么对层的形状没有限制,因为至少每个卷积层中的过滤器数量应该有。
谢谢你的帮助,
蒂姆
解决方案
图像的大小不会以任何方式影响卷积模型的权重。(例如,这会导致 Flatten 图层出现问题)。当然,过滤器的数量必须保持不变,否则你确实会改变权重。
过滤器是“图像层”,而不是“图像大小”。小图像产生小的过滤层,大图像产生大的过滤层。
要为可变图像大小创建 Keras Inception 模型,您必须将输入形状定义为(None, None, 3)
.
inceptionModel = keras.applications.inception_v3(...,input_shape=(None,None,3),....)
您可以通过转移使用训练模型中的权重(如果您以某种方式对其进行了训练):
inceptionModel.set_weights(trainedModel.get_weights())
推荐阅读
- c# - 在 Visual Studio 2019 中添加新数据源失败
- symfony - Symfony 5 - 如何在课堂上获取树枝定义的路径
- firedac - FireDAC 数组 DML 和返回子句
- python - 如何为端点上的不同请求设置单独的计数器指标?
- kubernetes - Kubernetes 中的 Prometheus 有太多不健康的目标
- react-native - 函数 onLocationChange(visibleLocation,cfi) 不会为@sbrighiu/epubjs-rn 中的每个页面(flow="paginated")返回 cfi
- java - 运行“mvn clean javadoc:jar package”时出现错误“未正确定义 JAVA_HOME 环境变量”
- bpmn - 属性面板扩展中的新自定义属性未反映在 bpmn 图 xml 中
- c++ - 如何签署由 GCC 编译的 DLL 以将其发布到 Microsoft Store?
- apache-spark - 在 PySpark 中匹配数组