| #ifndef TH_GENERIC_FILE |
| #define TH_GENERIC_FILE "generic/LogSigmoid.c" |
| #else |
| |
| void THNN_(LogSigmoid_updateOutput)( |
| THNNState *state, |
| THTensor *input, |
| THTensor *output, |
| THTensor *buffer) |
| { |
| THTensor_(resizeAs)(output, input); |
| THTensor_(resizeAs)(buffer, input); |
| |
| TH_TENSOR_APPLY3(real, output, real, input, real, buffer, |
| real z = exp(-*input_data); |
| *buffer_data = z; |
| *output_data = -log(1. + z); |
| ); |
| } |
| |
| void THNN_(LogSigmoid_updateGradInput)( |
| THNNState *state, |
| THTensor *input, |
| THTensor *gradOutput, |
| THTensor *gradInput, |
| THTensor *buffer) |
| { |
| THNN_CHECK_NELEMENT(input, gradOutput); |
| THTensor_(resizeAs)(gradInput, buffer); |
| TH_TENSOR_APPLY3(real, gradInput, real, gradOutput, real, buffer, |
| real z = *buffer_data; |
| *gradInput_data = *gradOutput_data * z / (1. + z); |
| ); |
| } |
| |
| #endif |