On Tue, Dec 20, 2011 at 8:41 PM, Philippe Michel <[email protected]>wrote:

> In lib/sigmoid.h, there is some code to calculate quickly exp(x) including
> the statement :
> i = (int)x1;
>
> In lib/neuralnetsse.c, the corresponding SSE code is :
> i.i  = _mm_cvtps_epi32( x1 );
>
> Shouldn't that be _mm_cvttps_epi32( x1 ) ? The cast-to-int truncates, it
> doesn't round, does it ?
>

Hmmm... interesting. I missed that! It seems like you are perfectly right.


> Amazingly (to me, at least), it apparently makes very little difference in
> the final net outputs but the current code seems erroneous.
>

I really tested and tested and tested the code before I committed it to the
repository. I ran thousands of test for output value, and did not find any
significant difference. I checked borderline cases, and and of array cases.
I compared benchmarks and found that my sigmoid implementation marked
exactly the same as the original implementation. I felt pretty safe my
implementation gave the same values. Are there some values that's really
off or was my tests too sloppy?

It would be rather funny to see if it's possible to find a position where
gnubg makes different moves with the two sigmoid implementations.

-Øystein
_______________________________________________
Bug-gnubg mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/bug-gnubg

Reply via email to