     size_t train_size_;
 
     Tensor<T> weights_;
+    Tensor<T> dW_;
+
     Tensor<float> workspace_;
     Tensor<float> trainspace_;
 


            weights_ = rand<T>(std::vector<int>{static_cast<int>(weight_size_ / sizeof(T)), 1}, curand_gen);


            std::vector<int> dim = {weights_.size(), 1, 1};
            wDesc_ = FilterDescriptorNd<T>(CUDNN_TENSOR_NCHW, dim);


#else
        if (precision != "float")
            throw std::runtime_error(ss.str());

        std::tie(fwd_time, bwd_data_time, bwd_params_time) =
             time_rnn<float>(hidden_state,
                             batch_size,
                             time_steps,
                             type,
                             inference);
#endif

        std::cout << std::setw(18) << fwd_time;
        if (!inference) {
            std::cout << std::setw(20) << bwd_data_time;
            std::cout << std::setw(20) << bwd_params_time;
        }
        std::cout << std::endl;
    }

