Numpy Pure Funkcje dla wydajności, buforowania
Piszę kod o umiarkowanej wydajności w numpy. Ten kod będzie znajdował się w najbardziej wewnętrznej pętli, obliczeń, których czas pracy jest mierzony w godzinach. Szybka kalkulacja sugeruje, że ten kod zostanie wykonany około 10 ^ 12 razy, w niektórych odmianach obliczeń.
Tak więc funkcja polega na obliczeniu sigmoidy (X) i obliczeniu jej pochodnej (gradientu). Sigmoid ma taką właściwość, jak dla
y = sigmoid (x), dy / dx = y (1-y)
W pythonie dla numpy wygląda to tak:
sigmoid = vectorize(lambda(x): 1.0/(1.0+exp(-x)))
grad_sigmoid = vectorize(lambda (x): sigmoid(x)*(1-sigmoid(x)))
Jak widać, obie funkcje są czyste (bez skutków ubocznych), więc są idealnymi kandydatami do zapamiętywania, przynajmniej na krótką metę, mam pewne obawy dotyczące buforowania każdego wywołania do sigmoida, które kiedykolwiek powstało: Przechowywanie 10 ^ 12 pływa, co zajmie kilka terabajtów pamięci RAM.
Czy istnieje dobry sposób na zoptymalizowanie tego?
Czy Python uzna, że są to czyste funkcje i buforują je dla mnie, stosownie do potrzeb?
Czy nie martwię się o nic?