Drei verschiedene CNN-Architekturen, die identische Metriken erzeugen (VGG16, DenseNet, ResNet)Python

Python-Programme
Anonymous
 Drei verschiedene CNN-Architekturen, die identische Metriken erzeugen (VGG16, DenseNet, ResNet)

Post by Anonymous »

Problem
Ich trainiere drei verschiedene CNN-Architekturen (VGG16, ResNet50, DenseNet121) mit demselben medizinischen Bildgebungsdatensatz, aber alle drei Modelle erzeugen identische Metriken (gleiche Genauigkeit, F1, AUC bis auf 4 Dezimalstellen). Dies bleibt über mehrere Trainingsläufe hinweg bestehen.
Einrichtung
Datensatz: 1016 medizinische Bilder -> konvertiert in das .npy-Format (binäre Klassifizierung)
Modelle: VGG16, ResNet50, DenseNet121 (alle ohne vorab trainierte Gewichte, von Grund auf trainiert)
Framework: TensorFlow 2.x
Eingabe: Graustufen Bilder (224 x 224 x 1), aus Gründen der Architekturkompatibilität in 3-Kanal konvertiert
Codestruktur

Code: Select all

python# Simplified version
def build_model(backbone_name, random_seed):
tf.random.set_seed(random_seed)
np.random.seed(random_seed)

# Grayscale to 3-channel conversion
image_input = tf.keras.Input(shape=(224, 224, 1))
x = augmentation_layer(image_input)
x = tf.keras.layers.Concatenate()([x, x, x])  # (224, 224, 3)

# Load backbone (VGG16/ResNet50/DenseNet121)
backbone = get_backbone(backbone_name, use_pretrained=False)
features = backbone(x)

# Independent classifier head with unique name
x = Dense(128, activation='relu', name=f'fc1_{backbone_name}_{random_seed}')(features)
x = Dropout(0.5)(x)
x = Dense(64, activation='relu', name=f'fc2_{backbone_name}_{random_seed}')(x)
output = Dense(1, activation='sigmoid', name=f'output_{backbone_name}_{random_seed}')(x)

model = tf.keras.Model(inputs=image_input, outputs=output)
return model

# Training
for model_name, seed in [('VGG16', 100), ('ResNet50', 200), ('DenseNet121', 300)]:
model = build_model(model_name, seed)
model.compile(optimizer=Adam(1e-4), loss='binary_crossentropy', metrics=['accuracy', AUC()])
model.fit(train_ds, validation_data=val_ds, epochs=25)

# Evaluate
predictions = model.predict(test_ds)
# Calculate metrics...

tf.keras.backend.clear_session()  # Clear between models
Beispielergebnisse

Code: Select all

Model       | Accuracy | F1     | AUC
------------|----------|--------|--------
VGG16       | 0.8234   | 0.8156 | 0.8891
ResNet50    | 0.8234   | 0.8156 | 0.8891  ← Identical!
DenseNet121 | 0.8234   | 0.8156 | 0.8891  ← Identical!
Durchgeführte Diagnosen
Vorhersagestatistiken (Mittelwert, Standard) SIND leicht unterschiedlich
Anzahl eindeutiger Vorhersagen variiert (Bereich 100–150)
Trainingsverläufe zeigen unterschiedliche Konvergenzmuster
Modellparameteranzahlen sind unterschiedlich (VGG: 15 Mio., ResNet: 24 Mio., DenseNet: 7M)
Fragen
  • Könnte es sich um einen Fehler bei der Metrikberechnung handeln, bei dem ich versehentlich Arrays wiederverwende?
  • Gibt es ein TensorFlow-Caching-Problem trotz Clearing-Sitzungen?
  • Könnten die Modelle in diesem Datensatz tatsächlich die gleiche Leistung erbringen? Chance?
  • Übersehe ich etwas über die ordnungsgemäße Modellisolation in TensorFlow?
Umgebung:

Code: Select all

TensorFlow 2.15
Python 3.10
Windows 11
GPU: RTX 3060

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post