Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x MobileNetV2如何为不同的自定义输入形状提供相同数量的参数?_Python 3.x_Tensorflow2.x_Mobilenet - Fatal编程技术网

Python 3.x MobileNetV2如何为不同的自定义输入形状提供相同数量的参数?

Python 3.x MobileNetV2如何为不同的自定义输入形状提供相同数量的参数?,python-3.x,tensorflow2.x,mobilenet,Python 3.x,Tensorflow2.x,Mobilenet,我将遵循tensorflow2,使用MobileNetV2作为基础架构进行精细调整和迁移学习 我注意到的第一件事是,预训练的“imagenet”权重的最大输入形状是(2242243)。我尝试使用自定义形状(640640,640,3),根据文档,它给出了一个警告,说明(224224,224,3)形状的权重已加载 因此,如果我加载这样的网络: import tensorflow as tf tf.keras.backend.clear_session() def create_model():

我将遵循tensorflow2,使用MobileNetV2作为基础架构进行精细调整和迁移学习

我注意到的第一件事是,预训练的“imagenet”权重的最大输入形状是(2242243)。我尝试使用自定义形状(640640,640,3),根据文档,它给出了一个警告,说明(224224,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.
如果我尝试使用(224224,224,3)这样的输入形状,则警告消失,然而,我尝试使用

tf_model.summary()
并发现可训练参数的数量是相同的

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

即使卷积滤波器的数目大小根据自定义输入形状而改变。那么,即使卷积滤波器具有更大的(空间)大小,参数的数量如何保持不变呢?

在更详细地检查之后,参数的数量似乎取决于内核大小和每个卷积层的滤波器数量,以及最终完全连接层上的神经元数量,以及由于中间的批量规范化层而产生的神经元数量

由于这些方面都不取决于输入图像的大小,即,每个卷积层的输出中的空间分辨率可能会改变,但是卷积核的大小仍然是相同的(例如3x3x3),因此,参数的数量也将是固定的


这种网络(即卷积神经网络)的参数数量与输入的空间大小无关。但是,通道数(例如,RGB彩色图像中的3个通道)必须正好为3。

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

但是,更改输入分辨率(此处为640x480x3)时的问题是,fc层之前的最后一层的尺寸与224x224x3的网络尺寸不同。因此,它不能像现在这样兼容

为什么?

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

  • 第1层步幅=2,因此第1层的输出为112x112x32
  • 第二层步幅=2,因此第二层的输出为56x56x16
  • 第三层步幅=1,因此第三层的输出为56x56x32
  • 等等
  • 步幅会影响中间要素贴图的分辨率。 如果使用640x480x3输入分辨率,最后一层会更大,因此FC层不兼容。 您应该将从香草模型(分辨率为224x224)学习到的卷积权重传输到与640x480x3输入数据兼容的新convnet