         auto logitInputLengths = INPUT_VARIABLE(3);
         auto outputGradients = OUTPUT_VARIABLE(0);
         auto context = block.launchContext();
+        REQUIRE_TRUE(outputGradients->isSameShape(logitInput), 0, "CtcLoss Gradient: wrong shape of output array, expected is %s but got %s instead !", ShapeUtils::shapeAsString(logitInput).c_str(), ShapeUtils::shapeAsString(outputGradients).c_str());
         //in Cudnn Batch is in the middle dimension
         logitInput->permutei({1,0,2});
         outputGradients->permutei({1,0,2});

            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
