51 lines
1.6 KiB
Python
51 lines
1.6 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
verify_feature_dims.py
|
|
|
|
Quick check: what does TF/Keras actually output for each model
|
|
with include_top=False? Compare against manuscript claims.
|
|
"""
|
|
|
|
import numpy as np
|
|
from tensorflow.keras.applications import (
|
|
VGG16, DenseNet121, EfficientNetB1, MobileNetV2, ResNet50
|
|
)
|
|
|
|
# Match the manuscript's input sizes
|
|
models = {
|
|
"VGG16": (VGG16, 224),
|
|
"DenseNet121": (DenseNet121, 224),
|
|
"EfficientNetB1":(EfficientNetB1, 240),
|
|
"MobileNetV2": (MobileNetV2, 224),
|
|
"ResNet50": (ResNet50, 224),
|
|
}
|
|
|
|
manuscript_claims = {
|
|
"VGG16": 25088,
|
|
"DenseNet121": 50176,
|
|
"EfficientNetB1":62720,
|
|
"MobileNetV2": 62720,
|
|
"ResNet50": 100352,
|
|
}
|
|
|
|
print(f"{'Model':<18s} {'Input':>5s} {'Spatial':>10s} {'Flattened':>10s} {'Manuscript':>12s} {'Match?':>7s}")
|
|
print("-" * 70)
|
|
|
|
for name, (model_fn, input_size) in models.items():
|
|
model = model_fn(weights="imagenet", include_top=False,
|
|
input_shape=(input_size, input_size, 3))
|
|
|
|
# Pass a dummy batch through
|
|
dummy = np.random.randn(1, input_size, input_size, 3)
|
|
# Need to preprocess correctly — but shape doesn't depend on values
|
|
output = model.predict(dummy, verbose=0)
|
|
|
|
spatial = output.shape[1:4] # (H, W, C) for channels_last
|
|
flattened = int(np.prod(spatial))
|
|
claimed = manuscript_claims[name]
|
|
match = "✅" if flattened == claimed else "❌"
|
|
|
|
print(f"{name:<18s} {input_size:>4}d {str(spatial):>10s} {flattened:>10d} {claimed:>12d} {match:>7s}")
|
|
|
|
print("\nNote: TF uses channels_last (NHWC) format.")
|