Mam funkcję
def weights(vector, loss_function, clipping, max_iterations=100, tolerance=1e-5)
który musi wywoływać funkcję utraty poziomu niższego poziomu, która może być dowolną z tych wartości z wektorem i obcinaniem przekazanym jako argument:
huber_loss(vector, clipping=2.38)
cauchy_loss(vector, clipping=3.27)
bisquare_loss(vector, clipping=1.04)
Każda funkcja straty ma specjalną właściwą domyślną wartość przycinania, więc możemy nazywać je albo huber_loss (wektor), albo huber_loss (wektor, 2) na przykład.
Chcę, aby parametr przycinania był opcjonalny w wagach () bez podawania wartości domyślnej na poziomie wag, ponieważ dałoby to takie samo domyślne ustawienie dla wszystkich funkcji utraty, a to jest niewłaściwe.
Jak uczynić parametr obcinania opcjonalnym wciężary, więc jeśli nie podamy wartości, używa ona domyślnej wartości konkretnej funkcji straty? (wiem, że możemy ustawić domyślny obcinek = brak i przetestować w funkcji utraty, jeśli obcinanie = brak, a następnie ustawić obcinanie = 2,38 itd. ale uważam, że jest to o wiele bardziej elegancki sposób).
Próbowałem rozwiązać ten problem w następujący sposób:
weights(vector, loss_function, max_iterations=100, tolerance=1e-5, *clipping)
ale jeśli chcemy nadać konkretną wartość przycinaniu bez określania max_iteracji i tolerancji, to nie działa.
Każdy pomysł, jak rozwiązać to w sposób pyton i elegancki?
Odpowiedzi:
1 dla odpowiedzi № 1def weights(vector, loss_function, clipping=None,
max_iterations=100, tolerance=1e-5)
kwargs = {}
if clipping:
kwargs["clipping"] = clipping
huber_loss(vector, **kwargs)
0 dla odpowiedzi nr 2
Możesz użyć max_iteracji, tolerancji i obcinania jako **kwargs
i sprawdź obecność kluczy wewnątrz argumentów
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)
nie musisz przekazywać wszystkich sprawdzanych kwargów
PS. Jeśli znajdziesz odpowiedź, której potrzebujesz - zaakceptuj ją :)