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