Forums before death by AOL, social media and spammers... "We can't have nice things"
|    comp.lang.fortran    |    Putting John Backus on a giant pedestal    |    5,127 messages    |
[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]
|    Message 4,553 of 5,127    |
|    Giorgio Pastore to All    |
|    Re: CPU time for transcendental function    |
|    22 Dec 23 15:37:52    |
      From: pastgio@units.it              Il 15/12/23 05:22, Steven G. Kargl ha scritto:       > On Fri, 15 Dec 2023 09:59:56 +0800, Robinn wrote:       >       >> I got some old neural network code (written about 30 years ago).       >> It has several activation functions, which only change 2 lines, like so:       >>       >> if (activation(1:2).eq.'SI' .or. activation(1:2).eq.'LO') then       >> output(i,j) = 1.0/(1.0+EXP(-output(i,j))) ! sigmoid       >> slope(i,j) = output(i,j) * (1.0 - output(i,j)) ! sigmoid       >> elseif (activation(1:2).eq.'TA') then       >> output(i,j) = TANH(output(i,j)) ! TANH       >> slope(i,j) = 1.0 - output(i,j)*output(i,j) ! TANH       >> elseif (activation(1:2).eq.'AR') then       >> y = output(i,j)       >> output(i,j) = ATAN(y) ! arctan       >> slope(i,j) = 1.0/(1.0 +y*y) ! arctan       >> elseif (activation(1:5).eq.'SOFTP') then       >> y = EXP(output(i,j))       >> output(i,j) = LOG(1.0+y) ! softplus       >> slope(i,j) = 1.0/(1.0+1.0/y) ! softplus       >> elseif (activation(1:5).eq.'SOFTS') then       >> y = output(i,j)       >> output(i,j) = y/(ABS(y)+1.0) ! softsign       >> slope(i,j) = 1.0/(1.0+ABS(y))**2 ! softsign       >>       >> Now when running it, the tanh option is slowest, as expected.       >> But the sigmoid (using exp) is faster than softsign, which only needs       >> abs and simple arithmetic. How can this be? Even if exp is using a       >> table lookup and spline interpolation, I would think that is slower.       >> Softsign would have an extra divide, but I can't see that tipping the       >> scales.       >       > There is insufficient information to provide much help. First, what       > compiler and operating system? Second, how did you do the timing?       > Third, is there a minimum working example that others can profile?       >              Fourth, what were the numbers of timing.              Giorgio              --- SoupGate-Win32 v1.05        * Origin: you cannot sedate... all the things you hate (1:229/2)    |
[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]
(c) 1994, bbs@darkrealms.ca