blob: 9414961f79160980bf2e5f127de34e9f6ef535b9 [file] [log] [blame]
#include "THCUNN.h"
#include "common.h"
struct sigmoidupdateOutput_functor
{
__device__ void operator()(float *output, const float *input) const
{
*output = 1./(1.+ exp(-*input));
}
};
void THNN_CudaSigmoid_updateOutput(THCState *state, THCudaTensor *input, THCudaTensor *output)
{
THCUNN_assertSameGPU(state, 2, input, output);
THCudaTensor_resizeAs(state, output, input);
THCudaTensor_pointwiseApply2(state, output, input, sigmoidupdateOutput_functor());
}
struct sigmoidupdateGradInput_functor
{
__device__ void operator()(float *gradInput, const float *output, const float *gradOutput) const
{
*gradInput = *gradOutput * (1.-*output) * (*output);
}
};
void THNN_CudaSigmoid_updateGradInput(THCState *state, THCudaTensor *input, THCudaTensor *gradOutput, THCudaTensor *gradInput, THCudaTensor *output)
{
THCUNN_assertSameGPU(state, 3, output, gradOutput, gradInput);
THCudaTensor_resizeAs(state, gradInput, output);
THCudaTensor_pointwiseApply3(state, gradInput, output, gradOutput, sigmoidupdateGradInput_functor());
}