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
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!
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?
Code: Select all
TensorFlow 2.15
Python 3.10
Windows 11
GPU: RTX 3060
Mobile version