logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Aproksymacja sigmoidy na liczbach stałoprzecinkowych

Aro_ 15 Gru 2009 18:12 1644 8
  • #1 7393236
    Aro_
    Poziom 15  
    Witam,
    Czy jest prosty sposób na obliczenie funkcji sigmoidalnej wykorzystując tylko liczby całkowite (stałoprzecinkowe)? Tablica wartości nie wchodzi w grę, gdyż zakres danych wynosi -50000 do 50000.
  • #2 7394006
    sedr
    Poziom 17  
    Aro_ napisał:
    Witam,
    Czy jest prosty sposób na obliczenie funkcji sigmoidalnej wykorzystując tylko liczby całkowite (stałoprzecinkowe)? Tablica wartości nie wchodzi w grę, gdyż zakres danych wynosi -50000 do 50000.


    To całkowite czy stałoprzecinkowe? Bo to nie jest to samo!
  • #3 7394313
    Aro_
    Poziom 15  
    Wszystko jedno, ważne żeby było szybko. Najlepiej na liczbach całkowitych, o ile to w ogóle możliwe, a jak nie to liczby stałoprzecinkowe, i tak powinno być dużo szybciej niż obliczenia na floatach.
    Zapomniałem o ważnej kwestii, dla sigmoidy φ(x) zakres wejściowy wynosi -5<x<5. Tak więc liczby całkowite zostają przeskalowane φ(c/10000), aby zrealizować łagodny próg.
    Oczywiście potrzebuje to do sieci neuronowych:)
  • #4 7395230
    sedr
    Poziom 17  
    Aro_ napisał:
    Wszystko jedno, ważne żeby było szybko. Najlepiej na liczbach całkowitych, o ile to w ogóle możliwe, a jak nie to liczby stałoprzecinkowe, i tak powinno być dużo szybciej niż obliczenia na floatach.
    Zapomniałem o ważnej kwestii, dla sigmoidy φ(x) zakres wejściowy wynosi -5<x<5. Tak więc liczby całkowite zostają przeskalowane φ(c/10000), aby zrealizować łagodny próg.
    Oczywiście potrzebuje to do sieci neuronowych:)


    No raczej nie wszystko jedno. W obliczaniu tej funkcji nie dość, że masz funkcję exp. to jeszcze jej parametr zazwyczaj nie jest całkowity. W zasadzie można było by użyć tylko liczb całkowitych jednak musiał byś zbudować sobie własny typ przy użyciu typów podstawowych.
    W czym implementujesz tą NN?
  • #5 7396365
    Aro_
    Poziom 15  
    Siec będzie pracować w stm32, piszę w C, ale może być też asembler. Generalnie chodzi mi właśnie o to aby jakoś pozbyć się obliczania exp.
  • Pomocny post
    #6 7397743
    __Grzegorz__
    Poziom 30  
    sigmoidę możesz aproksymować odcinkami linii prostej.
    Podziel ją na kilka odcinków, policz ich równania, i obliczenia sprowadzą się do wyboru przedziału (case) i mnożenia i dodawania (y=ax+b).

    Szybciej chyba nie można tego zrobić...
  • #7 7399158
    Aro_
    Poziom 15  
    Sposób prosty jak sama linia... tylko trzeba pokombinować ile tych przedziałów ma być, żeby się siec nie rozjeżdżała. W każdym razie dzięki za pomoc:)

    __Grzegorz__ napisał:
    Szybciej chyba nie można tego zrobić...

    A może funkcje kwadratowe i mniej przedziałów...
  • #8 7399380
    __Grzegorz__
    Poziom 30  
    jest to ciekawy pomysł...

    ale w każdym przedziale liczenie funkcji kwadratowej to będzie już 2 mnożenia i 2 dodawania (Horner).
  • #9 7421384
    Aro_
    Poziom 15  
    Zrobiłem 12 przedziałów i działa to dość dobrze:) Jeszcze raz dzięki!
REKLAMA