         NDArray::registerSpecialUse({&ctcLosses, &grads}, {&probs});
 
         cudaFree(tempWorkSpace);
-        callCudnnIfNoErr(err, cudnnDestroyTensorDescriptor,probsDesc);
-        if(gradsDesc) callCudnnIfNoErr(err, cudnnDestroyTensorDescriptor,gradsDesc);
-        callCudnnIfNoErr(err, cudnnDestroyCTCLossDescriptor,ctcLossDesc);
         return err;
      }
 

            bufferInHost<int32_t>(probInputLengthes),
            ctcLosses.specialBuffer(),
            gradsDesc,
            grads.specialBuffer(),
            CUDNN_CTC_LOSS_ALGO_DETERMINISTIC,
            ctcLossDesc,
            tempWorkSpace,

namespace platforms {



    std::vector<int> getConcatTargets(const NDArray &targetLabels, const NDArray &targetLabelLengths){
                //concatenate target labels
