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,552 of 5,127    |
|    Steven G. Kargl to Robinn    |
|    Re: CPU time for transcendental function    |
|    15 Dec 23 04:22:13    |
      From: sgk@REMOVEtroutmask.apl.washington.edu              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?              --       steve              --- 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