Ich habe Probleme beim Hinzufügen einer Strafe zu binary_crossentropy. Die Idee besteht darin, die Verlustfunktion zu bestrafen, wenn der Mittelwert vordefinierter Fehlergruppen einen bestimmten Schwellenwert überschreitet. Unten ist die Hilfsfunktion, die die Maske nimmt, die die Gruppen und die bereits berechnete Crossentropie ausdrückt. Es wird einfach die Anzahl der Male zurückgeben, die ein Schwellenwert überschritten wurde, um die tatsächliche Verlustfunktion, die es aufruft, zu bestrafen.Problem mit benutzerdefinierten Verlustfunktion in Keras
def penalty(groups_mask, binary_crossentropy):
errors = binary_crossentropy
unique_groups = set(groups_mask)
groups_mask = np.array(groups_mask)
threshold = # whatever
c = 0
for group in unique_groups:
error_mean = K.mean(errors[(groups_mask == group).nonzero()], axis=-1)
if error_mean > threshold:
c += 1
return c
Das Problem ist, dass error_mean nicht ein Skalar ist, und ich kann nicht auf einfache Weise herausfinden, es Schwelle zu vergleichen.
Ich kann wirklich verstehe nicht, was du in dieser Zeile erreichen willst: 'error_mean = K.mean (errors [(groups_mask == group) .nonzero()], axis = -1)' –