InvalidArgumentError: Graph execution error
Verfasst: Dienstag 31. Mai 2022, 15:32
Ich habe folgedendes Model geschrieben.
Dabei übergebe ich dem Model beim fitten die Trainingsdaten X_train_a und y_train_a. Die trainingsdaten ist das MNIST Fashion dataset OHNE die Bilder mit den Label 6 und 5 (also ohne die Bilder von Sandalen und Tshirts). Die anzahl der verschiednen Lables sind also 8 (0,1,2,3,4,7,8,9).
Wenn ich bei dem letzten Dense Layer 10 units mache scheint alles zu funktionieren. Wenn ich 8 units mache (was eigentlich richtig sein sollte, da ich ja nur acht klassen habe), erhalte ich die Fehlermeldung:
InvalidArgumentError: Graph execution error:
[....]
Node: 'sparse_categorical_crossentropy/SparseSoftmaxCrossEntropyWithLogits/SparseSoftmaxCrossEntropyWithLogits'
Received a label value of 9 which is outside the valid range of [0, 8). Label values: 1 9 8 9 8 9 1 1 9 9 2 1 2 7 8 0 4 8 8 9 0 4 4 9 4 4 8 8 4 0 7 2
Was verursacht den Fehler?
Das MNIST Fashion dataset habe ich folgendermaßen gesplittet
Code: Alles auswählen
# training model A um bilder außer (shirt und sandal zu klassifizieren)
model_a = Sequential([
Flatten(input_shape =[28,28]),
Dense(300, kernel_initializer = "lecun_normal"),
BatchNormalization(),
Activation("selu"),
Dense(100, kernel_initializer = "lecun_normal", use_bias=False),
BatchNormalization(),
Activation("selu"),
Dense(50, kernel_initializer = "lecun_normal", use_bias=False),
BatchNormalization(),
Activation("selu"),
Dense(50, kernel_initializer = "lecun_normal", use_bias=False),
BatchNormalization(),
Activation("selu"),
Dense(50, kernel_initializer = "lecun_normal", use_bias=False),
BatchNormalization(),
Activation("selu"),
Dense(8, activation = "softmax")
])
model_a.compile(optimizer="adam", loss ="sparse_categorical_crossentropy", metrics = ["accuracy"])
history = model_a.fit(X_train_a, y_train_a, epochs = 5, validation_data = (X_val_a, y_val_a))
Wenn ich bei dem letzten Dense Layer 10 units mache scheint alles zu funktionieren. Wenn ich 8 units mache (was eigentlich richtig sein sollte, da ich ja nur acht klassen habe), erhalte ich die Fehlermeldung:
InvalidArgumentError: Graph execution error:
[....]
Node: 'sparse_categorical_crossentropy/SparseSoftmaxCrossEntropyWithLogits/SparseSoftmaxCrossEntropyWithLogits'
Received a label value of 9 which is outside the valid range of [0, 8). Label values: 1 9 8 9 8 9 1 1 9 9 2 1 2 7 8 0 4 8 8 9 0 4 4 9 4 4 8 8 4 0 7 2
Was verursacht den Fehler?
Das MNIST Fashion dataset habe ich folgendermaßen gesplittet
Code: Alles auswählen
# funktion, welche übergeben X und y aufteilt
def split_dataset(X,y):
# liste von X und y wobei label mit sandal&shirt=true/ rest=false
y_sandal_shirts_ture = (y == 6) | (y == 5)
# sandal/ shirt ist ture
X_sandal_shirt = X[y_sandal_shirts_ture == True]
y_sandal_shirt = y[y_sandal_shirts_ture == True]
# rest ist false
X_rest = X[y_sandal_shirts_ture == False]
y_rest = y[y_sandal_shirts_ture == False]
return X_sandal_shirt, X_rest, y_sandal_shirt, y_rest
# laden von MNIST Fashion
(X_train_full, y_train_full), (X_test, y_test) = keras.datasets.fashion_mnist.load_data()
# Aufteilung der daten in validation und training set
X_val = X_train_full[:5000]
X_train = X_train_full[5000:]
y_val = y_train_full[:5000]
y_train = y_train_full[5000:]
# Aufteilung Daten in ein Dataset mit NUR tshirt und sandal label / und einem Dataset OHNE tshirt und sandal label
X_train_b, X_train_a, y_train_b, y_train_a = split_dataset(X_train,y_train)
X_val_b, X_val_a, y_val_b , y_val_a = split_dataset(X_val, y_val)
X_test_b, X_test_a, y_test_b, y_test_a = split_dataset(X_test, y_test)