对于不同的自定义输入形状,MobileNetV2 如何具有相同数量的参数?

阿特雷斯莫

我正在关注关于使用 MobileNetV2 作为基础架构的微调和迁移学习的 tensorflow2教程

我注意到的第一件事是,可用于预训练的“imagenet”权重的最大输入形状是 (224, 224, 3)。我尝试使用自定义形状 (640, 640, 3) 并且根据文档,它发出警告说 (224, 224, 3) 形状的权重已加载。

因此,如果我加载这样的网络:

import tensorflow as tf

tf.keras.backend.clear_session()
def create_model():
  base_model = tf.keras.applications.MobileNetV2(input_shape=(640,640,3),
                                include_top=False)
  x = base_model.output
  x = tf.keras.layers.GlobalAveragePooling2D()(x)
  x = tf.keras.layers.Dense((1), activation='sigmoid')(x)
  x = tf.keras.Model(inputs=base_model.inputs, outputs=x)
  x.compile(optimizer=tf.keras.optimizers.RMSprop(lr=0.0001),
                         loss='binary_crossentropy',
                         metrics=[tf.keras.metrics.BinaryAccuracy()])
  return x

tf_model = create_model()

它发出警告:

WARNING:tensorflow:`input_shape` is undefined or non-square, or `rows` is not in [96, 128, 160, 192, 224]. Weights for input shape (224, 224) will be loaded as the default.

如果我尝试使用像 (224, 224, 3) 这样的输入形状,那么警告就会消失,但是,我尝试使用以下方法检查可训练参数的数量

tf_model.summary()

并发现可训练参数的数量是相同的

Total params: 2,259,265
Trainable params: 2,225,153
Non-trainable params: 34,112

即使卷积过滤器的数字大小会根据自定义输入形状发生相应变化。那么即使卷积滤波器具有更大的(空间)尺寸,参数的数量如何保持不变呢?

无休息NR

你是权利。conv 参数的数量仅取决于内核的大小、特定层的通道数和总层数。

但是,当您更改输入分辨率(此处为 640x480x3)时,问题在于 fc 层之前的最后一层与具有 224x224x3 的网络具有不同的维度。因此,它不兼容。

为什么?

输入分辨率为 224x224x3 的示例:

  1. 第 1 层步幅 = 2 因此第 1 层的输出为 112x112x32
  2. 第 2 层步幅 = 2 因此第 2 层的输出为 56x56x16
  3. 第 3 层步幅 = 1 因此第 3 层的输出为 56x56x32
  4. 等等...

步幅影响中间特征图的分辨率。如果您使用 640x480x3 输入分辨率,那么最后一层会更大,因此 FC 层不兼容。您应该将从 vanilla 模型(分辨率为 224x224)学到的卷积权重传输到与 640x480x3 输入数据兼容的新卷积网络。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使函数具有不同数量的参数

具有相同数量的参数的相同谓词,但不同的参数类型

是否可以通过传递相同的参数包来调用具有不同数量参数的函数

如何实现具有不同数量参数的抽象方法

如何实现具有参数相同,但不同签名的方法

如何通过导出导出相同的函数但具有不同的参数

如何实现对相同函数但具有不同参数的线程?

如何在R函数中具有不同数量的具有默认值的参数?

提取具有不同数量参数的实体

具有不同数量参数的Haskell函数

方程具有不同数量的参数

如何拥有具有不同数量和类型参数的接口方法?C#

具有相同模板的不同参数

具有不同参数的相同查询

当值类型具有不同数量的类型参数时,如何覆盖值?

如何通过每行具有不同数量参数的文本文件运行命令

Ruby - 如何编写一个接受具有不同参数数量的过程的方法?

具有相同 ID 的 Android 自定义输入

如何用C ++编写几乎相同的具有相同名称的相同函数来处理不同的类参数?

是什么使相同数量的循环具有不同的性能?

在Haskell中过滤具有相同数量的不同元素的列表

具有自定义形状的DialogFragment

朱莉娅:对于两个大小相等的向量,如何使直方图具有相同数量的面元?

如何制作具有多个几何形状的自定义ggplot2几何图形

.htacess如何用相同数量的参数重写2个URL?

如何获取值作为具有多个相同输入名称的参数?

单位百分比移动时如何移动具有不同最大值的相同数量的滑块

Vue。$ router.push具有相同的路由但参数不同-如何触发转换?

如何实现两个具有相同名称但参数不同的JNI方法?