我正在关注关于使用 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
即使卷积过滤器的数量大小会根据自定义输入形状发生相应变化。那么,即使卷积滤波器具有更大(空间)尺寸,参数的数量如何保持不变呢?