Ich habe eine Funktion
def weights(vector, loss_function, clipping, max_iterations=100, tolerance=1e-5)
die eine niedrigere Verlustfunktion aufrufen muss, die mit dem Vektor und dem in Argument übergebenen Clipping eine der folgenden sein kann:
huber_loss(vector, clipping=2.38)
cauchy_loss(vector, clipping=3.27)
bisquare_loss(vector, clipping=1.04)
Jede Verlustfunktion hat einen speziellen Standard-Abschneidewert, sodass wir sie beispielsweise entweder huber_loss (vector) oder huber_loss (vector, 2) nennen können.
Ich möchte den Abschneideparameter in weights () optional machen, ohne einen Standardwert auf Gewichtsebene anzugeben, da dies allen Verlustfunktionen den gleichen Standardwert geben würde, und das ist falsch.
So machen Sie den Beschneidungsparameter optional inGewichte so, dass, wenn wir keinen Wert angeben, der Standardwert der spezifischen Verlustfunktion verwendet wird (ich weiß, dass wir standardmäßige Beschneidungen festlegen können = None und in der Verlustfunktion testen, ob Abschneiden = Keine, dann Abschneiden = 2,38 usw. festlegen. aber ich denke, es gibt einen viel eleganteren Weg, dies zu tun.
Ich habe versucht, das Problem auf diese Weise zu lösen:
weights(vector, loss_function, max_iterations=100, tolerance=1e-5, *clipping)
Wenn Sie jedoch einen bestimmten Wert für das Abschneiden festlegen möchten, ohne max_iterations und Toleranz anzugeben, funktioniert dies nicht.
Hast du eine Idee, wie du das auf pythonische und elegante Weise lösen kannst?
Antworten:
1 für die Antwort № 1def weights(vector, loss_function, clipping=None,
max_iterations=100, tolerance=1e-5)
kwargs = {}
if clipping:
kwargs["clipping"] = clipping
huber_loss(vector, **kwargs)
0 für die Antwort № 2
Sie können max_iterations, tolerance und clipping als verwenden **kwargs
und prüfen, ob Schlüssel in Argumenten vorhanden sind
def weights(vector, loss_function, **kwargs):
if kwargs["max_iterations"]:
max_iterations = kwargs["max_iterations"]
else:
max_iterations = 100
... # and so go on for clipping and tolerance
weights(vect, lf, maxa_iterations=5, clipping=2)
Sie müssen nicht alle Kwargs passieren, die Sie überprüfen
PS. Wenn Sie eine Antwort finden, die Sie brauchen, akzeptieren Sie sie :)