typename std::enable_if<I < sizeof...(Tp), void>::type NetworkGradients(arma::mat& gradients, std::tuple<Tp...>& network, size_t offset) { NetworkGradients<I + 1, Tp...>(gradients, network, offset + LayerGradients(std::get<I>(network), gradients, offset, std::get<I>(network).OutputParameter())); }
inline void GradientVisitor::operator()(LayerType* layer) const { LayerGradients(layer, layer->OutputParameter()); }
inline size_t GradientSetVisitor::operator()(LayerType* layer) const { return LayerGradients(layer, layer->OutputParameter()); }