 
   Tensor<float>* out_tensor = Tensor<float>::CreateTensorGPU(out_dims);
   Tensor<float>* out_tensor_diff = Tensor<float>::CreateTensorGPU(out_dims);
+  
   Tensor<float>* softmax_out_tensor = Tensor<float>::CreateTensorGPU(softmax_out_dims);
+  Tensor<float>* softmax_out_tensor_diff = Tensor<float>::CreateTensorGPU(softmax_out_dims);
 
   Tensor<float>* y_out = Tensor<float>::CreateTensorGPU(out_dims);
 

    cudaStatus = cudaGetLastError();
    checkCudaErrors(cudaStatus);

    calc_out_diff<<<1,1>>>(out_tensor_diff, out_tensor, y_out);
    cudaStatus = cudaGetLastError();
    checkCudaErrors(cudaStatus);


  size_t out_dims[4];
  out.GetTopsDims({h1_dims}, {out_dims});

  Tensor<float>* in_tensor = Tensor<float>::CreateTensorCPU(in_dims);
  Tensor<float>* in_tensor_diff = Tensor<float>::CreateTensorCPU(in_dims);

