Skip to content

Instantly share code, notes, and snippets.

@kris-singh
Last active March 7, 2017 23:09
Show Gist options
  • Save kris-singh/c0b3a01509b20f10841fae117b8e3baa to your computer and use it in GitHub Desktop.
Save kris-singh/c0b3a01509b20f10841fae117b8e3baa to your computer and use it in GitHub Desktop.
/**
* @file fanin_visitor_impl.hpp
* @author Marcus Edel
* @author Kris Singh
*
* Implementation of the fain layer abstraction.
*
* mlpack is free software; you may redistribute it and/or modify it under the
* terms of the 3-clause BSD license. You should have received a copy of the
* 3-clause BSD license along with mlpack. If not, see
* http://www.opensource.org/licenses/BSD-3-Clause for more information.
*/
#ifndef MLPACK_METHODS_ANN_VISITOR_FANIN_IMPL_VISITOR_IMPL_HPP
#define MLPACK_METHODS_ANN_VISITOR_FANIN_IMPL_VISITOR_IMPL_HPP
// In case it hasn't been included yet.
#include "fanin_visitor.hpp"
namespace mlpack {
namespace ann {
//! FanIN Visitor visitor class.
template<typename LayerType>
size_t FanInVisitor::operator()(LayerType* layer) const
{
return LayerFanIn(layer, layer->OutputParameter());
}
template<typename T, typename P>
inline typename std::enable_if<
!HasParametersCheck<T, P&(T::*)()>::value &&
!HasInputWidth<T, size_t&(T::*)()>::value, size_t>::type
FanInVisitor::LayerFanIn(T* /* layer */, P& /* output */) const
{
return 0;
}
template<typename T, typename P>
inline typename std::enable_if<
!HasInputWidth<T, size_t&(T::*)()>::value &&
HasParametersCheck<T, P&(T::*)()>::value, size_t>::type
FanInVisitor::LayerFanIn(T* layer, P& /* output */) const
{
return layer->Parameters().n_rows;
}
template<typename T, typename P>
inline typename std::enable_if<
!HasParametersCheck<T, P&(T::*)()>::value &&
HasInputWidth<T, size_t&(T::*)()>::value, size_t>::type
FanInVisitor::LayerFanIn(T* layer, P& /* output */) const
{
return layer->InputWidth();
}
template<typename T, typename P>
inline typename std::enable_if<
HasParametersCheck<T, P&(T::*)()>::value &&
HasInputWidth<T, size_t&(T::*)()>::value, size_t>::type
FanInVisitor::LayerFanIn(T* layer, P& /* output */) const
{
//Todo
return 0;
}
} // namespace ann
} // namespace mlpack
#endif
@kris-singh
Copy link
Author

kris-singh commented Mar 5, 2017

In file included from /home/kris/Desktop/GsoC2K17/mlpack/src/mlpack/../mlpack/methods/ann/visitor/fanin_visitor.hpp:69:0,
from /home/kris/Desktop/GsoC2K17/mlpack/src/mlpack/tests/xavier_test.cpp:7:
/home/kris/Desktop/GsoC2K17/mlpack/src/mlpack/../mlpack/methods/ann/visitor/fanin_visitor_impl.hpp:42:1: error: prototype for ‘typename std::enable_if<((! mlpack::ann::HasInputWidth<T, long unsigned int& (T::)()>::value) && mlpack::ann::HasParametersCheck<T, P& (T::)()>::value), long unsigned int>::type mlpack::ann::FanInVisitor::LayerFanIn(T*, P&) const’ does not match any in class ‘mlpack::ann::FanInVisitor’
FanInVisitor::LayerFanIn(T* layer, P& /* output /) const
^
In file included from /home/kris/Desktop/GsoC2K17/mlpack/src/mlpack/tests/xavier_test.cpp:7:0:
/home/kris/Desktop/GsoC2K17/mlpack/src/mlpack/../mlpack/methods/ann/visitor/fanin_visitor.hpp:62:3: error: candidates are: template<class T, class P> typename std::enable_if<(mlpack::ann::HasParametersCheck<T, P& (T::
)()>::value && mlpack::ann::HasInputWidth<T, long unsigned int& (T::)()>::value), long unsigned int>::type mlpack::ann::FanInVisitor::LayerFanIn(T, P&) const
LayerFanIn(T* layer, P& /* output /) const;
^
/home/kris/Desktop/GsoC2K17/mlpack/src/mlpack/../mlpack/methods/ann/visitor/fanin_visitor.hpp:54:3: error: template<class T, class P> typename std::enable_if<(mlpack::ann::HasParametersCheck<T, P& (T::
)()>::value && (! mlpack::ann::HasInputWidth<T, long unsigned int& (T::)()>::value)), long unsigned int>::type mlpack::ann::FanInVisitor::LayerFanIn(T, P&) const
LayerFanIn(T* layer, P& /* output /) const;
^
/home/kris/Desktop/GsoC2K17/mlpack/src/mlpack/../mlpack/methods/ann/visitor/fanin_visitor.hpp:48:3: error: template<class T, class P> typename std::enable_if<((! mlpack::ann::HasParametersCheck<T, P& (T::
)()>::value) && mlpack::ann::HasInputWidth<T, long unsigned int& (T::)()>::value), long unsigned int>::type mlpack::ann::FanInVisitor::LayerFanIn(T, P&) const
LayerFanIn(T* layer, P& /* output /) const;
^
/home/kris/Desktop/GsoC2K17/mlpack/src/mlpack/../mlpack/methods/ann/visitor/fanin_visitor.hpp:42:3: error: template<class T, class P> typename std::enable_if<((! mlpack::ann::HasParametersCheck<T, P& (T::
)()>::value) && (! mlpack::ann::HasInputWidth<T, long unsigned int& (T::)()>::value)), long unsigned int>::type mlpack::ann::FanInVisitor::LayerFanIn(T, P&) const
LayerFanIn(T* layer, P& /* output /) const;
^
In file included from /home/kris/Desktop/GsoC2K17/mlpack/src/mlpack/../mlpack/methods/ann/visitor/fanin_visitor.hpp:69:0,
from /home/kris/Desktop/GsoC2K17/mlpack/src/mlpack/tests/xavier_test.cpp:7:
/home/kris/Desktop/GsoC2K17/mlpack/src/mlpack/../mlpack/methods/ann/visitor/fanin_visitor_impl.hpp: In instantiation of ‘typename std::enable_if<(mlpack::ann::HasParametersCheck<T, P& (T::
)()>::value && mlpack::ann::HasInputWidth<T, long unsigned int& (T::)()>::value), long unsigned int>::type mlpack::ann::FanInVisitor::LayerFanIn(T, P&) const [with T = mlpack::ann::Convolution<mlpack::ann::NaiveConvolutionmlpack::ann::ValidConvolution, mlpack::ann::NaiveConvolutionmlpack::ann::FullConvolution, mlpack::ann::NaiveConvolutionmlpack::ann::ValidConvolution, arma::Mat, arma::Mat >; P = arma::Mat; typename std::enable_if<(mlpack::ann::HasParametersCheck<T, P& (T::)()>::value && mlpack::ann::HasInputWidth<T, long unsigned int& (T::)()>::value), long unsigned int>::type = long unsigned int]’:
/home/kris/Desktop/GsoC2K17/mlpack/src/mlpack/../mlpack/methods/ann/visitor/fanin_visitor_impl.hpp:26:54: required from ‘size_t mlpack::ann::FanInVisitor::operator()(LayerType*) const [with LayerType = mlpack::ann::Convolution<mlpack::ann::NaiveConvolutionmlpack::ann::ValidConvolution, mlpack::ann::NaiveConvolutionmlpack::ann::FullConvolution, mlpack::ann::NaiveConvolutionmlpack::ann::ValidConvolution, arma::Mat, arma::Mat >; size_t = long unsigned int]’
/usr/include/boost/variant/variant.hpp:1017:32: required from ‘boost::detail::variant::invoke_visitor::result_type boost::detail::variant::invoke_visitor::internal_visit(T&, int) [with T = mlpack::ann::Convolution<mlpack::ann::NaiveConvolutionmlpack::ann::ValidConvolution, mlpack::ann::NaiveConvolutionmlpack::ann::FullConvolution, mlpack::ann::NaiveConvolutionmlpack::ann::ValidConvolution, arma::Mat, arma::Mat >; Visitor = const mlpack::ann::FanInVisitor; boost::detail::variant::invoke_visitor::result_type = long unsigned int]’
/usr/include/boost/variant/detail/visitation_impl.hpp:130:9: required from ‘typename Visitor::result_type boost::detail::variant::visitation_impl_invoke_impl(int, Visitor&, VoidPtrCV, T
, mpl_::true_) [with Visitor = boost::detail::variant::invoke_visitor; VoidPtrCV = void*; T = mlpack::ann::Convolution<mlpack::ann::NaiveConvolutionmlpack::ann::ValidConvolution, mlpack::ann::NaiveConvolutionmlpack::ann::FullConvolution, mlpack::ann::NaiveConvolutionmlpack::ann::ValidConvolution, arma::Mat, arma::Mat >; typename Visitor::result_type = long unsigned int; mpl_::true_ = mpl_::bool_]’
/usr/include/boost/variant/detail/visitation_impl.hpp:173:9: required from ‘typename Visitor::result_type boost::detail::variant::visitation_impl_invoke(int, Visitor&, VoidPtrCV, T
, NoBackupFlag, int) [with Visitor = boost::detail::variant::invoke_visitor; VoidPtrCV = void*; T = mlpack::ann::Convolution<mlpack::ann::NaiveConvolutionmlpack::ann::ValidConvolution, mlpack::ann::NaiveConvolutionmlpack::ann::FullConvolution, mlpack::ann::NaiveConvolutionmlpack::ann::ValidConvolution, arma::Mat, arma::Mat >; NoBackupFlag = boost::variant<mlpack::ann::Add<arma::Mat, arma::Mat >, mlpack::ann::AddMerge<arma::Mat, arma::Mat >, mlpack::ann::BaseLayer<mlpack::ann::LogisticFunction, arma::Mat, arma::Mat >, mlpack::ann::BaseLayer<mlpack::ann::IdentityFunction, arma::Mat, arma::Mat >, mlpack::ann::BaseLayer<mlpack::ann::TanhFunction, arma::Mat, arma::Mat >, mlpack::ann::BaseLayer<mlpack::ann::RectifierFunction, arma::Mat, arma::Mat >, mlpack::ann::Concat<arma::Mat, arma::Mat >, mlpack::ann::ConcatPerformance<mlpack::ann::NegativeLogLikelihood<arma::Mat, arma::Mat >, arma::Mat, arma::Mat >, mlpack::ann::Constant<arma::Mat, arma::Mat >, mlpack::ann::Convolution<mlpack::ann::NaiveConvolutionmlpack::ann::ValidConvolution, mlpack::ann::NaiveConvolutionmlpack::ann::FullConvolution, mlpack::ann::NaiveConvolutionmlpack::ann::ValidConvolution, arma::Mat, arma::Mat >, mlpack::ann::DropConnect<arma::Mat, arma::Mat >, mlpack::ann::Dropout<arma::Mat, arma::Mat >, mlpack::ann::Glimpse<arma::Mat, arma::Mat >, mlpack::ann::HardTanH<arma::Mat, arma::Mat >, mlpack::ann::Join<arma::Mat, arma::Mat >, mlpack::ann::LeakyReLU<arma::Mat, arma::Mat >, mlpack::ann::Linear<arma::Mat, arma::Mat >, mlpack::ann::LinearNoBias<arma::Mat, arma::Mat >, mlpack::ann::LogSoftMax<arma::Mat, arma::Mat >, mlpack::ann::Lookup<arma::Mat, arma::Mat >, mlpack::ann::LSTM<arma::Mat, arma::Mat >, mlpack::ann::MaxPooling<arma::Mat, arma::Mat >, mlpack::ann::MeanPooling<arma::Mat, arma::Mat >, mlpack::ann::MeanSquaredError<arma::Mat, arma::Mat >, mlpack::ann::MultiplyConstant<arma::Mat, arma::Mat >, mlpack::ann::NegativeLogLikelihood<arma::Mat, arma::Mat >, mlpack::ann::PReLU<arma::Mat, arma::Mat >, mlpack::ann::Recurrent<arma::Mat, arma::Mat >, mlpack::ann::RecurrentAttention<arma::Mat, arma::Mat >, mlpack::ann::ReinforceNormal<arma::Mat, arma::Mat >, mlpack::ann::Select<arma::Mat, arma::Mat >, mlpack::ann::Sequential<arma::Mat, arma::Mat >, mlpack::ann::VRClassReward<arma::Mat, arma::Mat >>::has_fallback_type_; typename Visitor::result_type = long unsigned int]’
/usr/include/boost/variant/detail/visitation_impl.hpp:256:5: required from ‘typename Visitor::result_type boost::detail::variant::visitation_impl(int, int, Visitor&, VoidPtrCV, mpl_::false_, NoBackupFlag, Which*, step0*) [with Which = mpl_::int_<0>; step0 = boost::detail::variant::visitation_impl_step<boost::mpl::l_iter<boost::mpl::l_item<mpl_::long_<33l>, mlpack::ann::Add<arma::Mat, arma::Mat >, boost::mpl::l_item<mpl_::long_<32l>, mlpack::ann::AddMerge<arma::Mat, arma::Mat >, boost::mpl::l_item<mpl_::long_<31l>, mlpack::ann::BaseLayer<mlpack::ann::LogisticFunction, arma::Mat, arma::Mat >, boost::mpl::l_item<mpl_::long_<30l>, mlpack::ann::BaseLayer<mlpack::ann::IdentityFunction, arma::Mat, arma::Mat >, boost::mpl::l_item<mpl_::long_<29l>, mlpack::ann::BaseLayer<mlpack::ann::TanhFunction, arma::Mat, arma::Mat >, boost::mpl::l_item<mpl_::long_<28l>, mlpack::ann::BaseLayer<mlpack::ann::RectifierFunction, arma::Mat, arma::Mat >, boost::mpl::l_item<mpl_::long_<27l>, mlpack::ann::Concat<arma::Mat, arma::Mat >, boost::mpl::l_item<mpl_::long_<26l>, mlpack::ann::ConcatPerformance<mlpack::ann::NegativeLogLikelihood<arma::Mat, arma::Mat >, arma::Mat, arma::Mat >, boost::mpl::l_item<mpl_::long_<25l>, mlpack::ann::Constant<arma::Mat, arma::Mat >, boost::mpl::l_item<mpl_::long_<24l>, mlpack::ann::Convolution<mlpack::ann::NaiveConvolutionmlpack::ann::ValidConvolution, mlpack::ann::NaiveConvolutionmlpack::ann::FullConvolution, mlpack::ann::NaiveConvolutionmlpack::ann::ValidConvolution, arma::Mat, arma::Mat >, boost::mpl::l_item<mpl_::long_<23l>, mlpack::ann::DropConnect<arma::Mat, arma::Mat >, boost::mpl::l_item<mpl_::long_<22l>, mlpack::ann::Dropout<arma::Mat, arma::Mat >, boost::mpl::l_item<mpl_::long_<21l>, mlpack::ann::Glimpse<arma::Mat, arma::Mat >, boost::mpl::l_item<mpl_::long_<20l>, mlpack::ann::HardTanH<arma::Mat, arma::Mat >, boost::mpl::l_item<mpl_::long_<19l>, mlpack::ann::Join<arma::Mat, arma::Mat >, boost::mpl::l_item<mpl_::long_<18l>, mlpack::ann::LeakyReLU<arma::Mat, arma::Mat >, boost::mpl::l_item<mpl_::long_<17l>, mlpack::ann::Linear<arma::Mat, arma::Mat >, boost::mpl::l_item<mpl_::long_<16l>, mlpack::ann::LinearNoBias<arma::Mat, arma::Mat >, boost::mpl::l_item<mpl_::long_<15l>, mlpack::ann::LogSoftMax<arma::Mat, arma::Mat >, boost::mpl::l_item<mpl_::long_<14l>, mlpack::ann::Lookup<arma::Mat, arma::Mat >, boost::mpl::l_item<mpl_::long_<13l>, mlpack::ann::LSTM<arma::Mat, arma::Mat >, boost::mpl::l_item<mpl_::long_<12l>, mlpack::ann::MaxPooling<arma::Mat, arma::Mat >, boost::mpl::l_item<mpl_::long_<11l>, mlpack::ann::MeanPooling<arma::Mat, arma::Mat >, boost::mpl::l_item<mpl_::long_<10l>, mlpack::ann::MeanSquaredError<arma::Mat, arma::Mat >, boost::mpl::l_item<mpl_::long_<9l>, mlpack::ann::MultiplyConstant<arma::Mat, arma::Mat >, boost::mpl::l_item<mpl_::long_<8l>, mlpack::ann::NegativeLogLikelihood<arma::Mat, arma::Mat >, boost::mpl::l_item<mpl_::long_<7l>, mlpack::ann::PReLU<arma::Mat, arma::Mat >, boost::mpl::l_item<mpl_::long_<6l>, mlpack::ann::Recurrent<arma::Mat, arma::Mat >, boost::mpl::l_item<mpl_::long_<5l>, mlpack::ann::RecurrentAttention<arma::Mat, arma::Mat >, boost::mpl::l_item<mpl_::long_<4l>, mlpack::ann::ReinforceNormal<arma::Mat, arma::Mat >, boost::mpl::l_item<mpl_::long_<3l>, mlpack::ann::Select<arma::Mat, arma::Mat >, boost::mpl::l_item<mpl_::long_<2l>, mlpack::ann::Sequential<arma::Mat, arma::Mat >, boost::mpl::l_item<mpl_::long_<1l>, mlpack::ann::VRClassReward<arma::Mat, arma::Mat >, boost::mpl::l_end> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >, boost::mpl::l_iterboost::mpl::l_end >; Visitor = boost::detail::variant::invoke_visitor; VoidPtrCV = void; NoBackupFlag = boost::variant<mlpack::ann::Add<arma::Mat, arma::Mat >, mlpack::ann::AddMerge<arma::Mat, arma::Mat >, mlpack::ann::BaseLayer<mlpack::ann::LogisticFunction, arma::Mat, arma::Mat >, mlpack::ann::BaseLayer<mlpack::ann::IdentityFunction, arma::Mat, arma::Mat >, mlpack::ann::BaseLayer<mlpack::ann::TanhFunction, arma::Mat, arma::Mat >, mlpack::ann::BaseLayer<mlpack::ann::RectifierFunction, arma::Mat, arma::Mat >, mlpack::ann::Concat<arma::Mat, arma::Mat >, mlpack::ann::ConcatPerformance<mlpack::ann::NegativeLogLikelihood<arma::Mat, arma::Mat >, arma::Mat, arma::Mat >, mlpack::ann::Constant<arma::Mat, arma::Mat >, mlpack::ann::Convolution<mlpack::ann::NaiveConvolutionmlpack::ann::ValidConvolution, mlpack::ann::NaiveConvolutionmlpack::ann::FullConvolution, mlpack::ann::NaiveConvolutionmlpack::ann::ValidConvolution, arma::Mat, arma::Mat >, mlpack::ann::DropConnect<arma::Mat, arma::Mat >, mlpack::ann::Dropout<arma::Mat, arma::Mat >, mlpack::ann::Glimpse<arma::Mat, arma::Mat >, mlpack::ann::HardTanH<arma::Mat, arma::Mat >, mlpack::ann::Join<arma::Mat, arma::Mat >, mlpack::ann::LeakyReLU<arma::Mat, arma::Mat >, mlpack::ann::Linear<arma::Mat, arma::Mat >, mlpack::ann::LinearNoBias<arma::Mat, arma::Mat >, mlpack::ann::LogSoftMax<arma::Mat, arma::Mat >, mlpack::ann::Lookup<arma::Mat, arma::Mat >, mlpack::ann::LSTM<arma::Mat, arma::Mat >, mlpack::ann::MaxPooling<arma::Mat, arma::Mat >, mlpack::ann::MeanPooling<arma::Mat, arma::Mat >, mlpack::ann::MeanSquaredError<arma::Mat, arma::Mat >, mlpack::ann::MultiplyConstant<arma::Mat, arma::Mat >, mlpack::ann::NegativeLogLikelihood<arma::Mat, arma::Mat >, mlpack::ann::PReLU<arma::Mat, arma::Mat >, mlpack::ann::Recurrent<arma::Mat, arma::Mat >, mlpack::ann::RecurrentAttention<arma::Mat, arma::Mat >, mlpack::ann::ReinforceNormal<arma::Mat, arma::Mat >, mlpack::ann::Select<arma::Mat, arma::Mat >, mlpack::ann::Sequential<arma::Mat, arma::Mat >, mlpack::ann::VRClassReward<arma::Mat, arma::Mat >>::has_fallback_type_; typename Visitor::result_type = long unsigned int; mpl_::false_ = mpl_::bool_]’
/usr/include/boost/variant/variant.hpp:2326:13: required from ‘static typename Visitor::result_type boost::variant<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39>::internal_apply_visitor_impl(int, int, Visitor&, VoidPtrCV) [with Visitor = boost::detail::variant::invoke_visitor; VoidPtrCV = void
; T0_ = mlpack::ann::Add<arma::Mat, arma::Mat >; T1 = mlpack::ann::AddMerge<arma::Mat, arma::Mat >; T2 = mlpack::ann::BaseLayer<mlpack::ann::LogisticFunction, arma::Mat, arma::Mat >; T3 = mlpack::ann::BaseLayer<mlpack::ann::IdentityFunction, arma::Mat, arma::Mat >; T4 = mlpack::ann::BaseLayer<mlpack::ann::TanhFunction, arma::Mat, arma::Mat >; T5 = mlpack::ann::BaseLayer<mlpack::ann::RectifierFunction, arma::Mat, arma::Mat >; T6 = mlpack::ann::Concat<arma::Mat, arma::Mat >; T7 = mlpack::ann::ConcatPerformance<mlpack::ann::NegativeLogLikelihood<arma::Mat, arma::Mat >, arma::Mat, arma::Mat >; T8 = mlpack::ann::Constant<arma::Mat, arma::Mat >; T9 = mlpack::ann::Convolution<mlpack::ann::NaiveConvolutionmlpack::ann::ValidConvolution, mlpack::ann::NaiveConvolutionmlpack::ann::FullConvolution, mlpack::ann::NaiveConvolutionmlpack::ann::ValidConvolution, arma::Mat, arma::Mat >; T10 = mlpack::ann::DropConnect<arma::Mat, arma::Mat >; T11 = mlpack::ann::Dropout<arma::Mat, arma::Mat >; T12 = mlpack::ann::Glimpse<arma::Mat, arma::Mat >; T13 = mlpack::ann::HardTanH<arma::Mat, arma::Mat >; T14 = mlpack::ann::Join<arma::Mat, arma::Mat >; T15 = mlpack::ann::LeakyReLU<arma::Mat, arma::Mat >; T16 = mlpack::ann::Linear<arma::Mat, arma::Mat >; T17 = mlpack::ann::LinearNoBias<arma::Mat, arma::Mat >; T18 = mlpack::ann::LogSoftMax<arma::Mat, arma::Mat >; T19 = mlpack::ann::Lookup<arma::Mat, arma::Mat >; T20 = mlpack::ann::LSTM<arma::Mat, arma::Mat >; T21 = mlpack::ann::MaxPooling<arma::Mat, arma::Mat >; T22 = mlpack::ann::MeanPooling<arma::Mat, arma::Mat >; T23 = mlpack::ann::MeanSquaredError<arma::Mat, arma::Mat >; T24 = mlpack::ann::MultiplyConstant<arma::Mat, arma::Mat >; T25 = mlpack::ann::NegativeLogLikelihood<arma::Mat, arma::Mat >; T26 = mlpack::ann::PReLU<arma::Mat, arma::Mat >; T27 = mlpack::ann::Recurrent<arma::Mat, arma::Mat >; T28 = mlpack::ann::RecurrentAttention<arma::Mat, arma::Mat >; T29 = mlpack::ann::ReinforceNormal<arma::Mat, arma::Mat >; T30 = mlpack::ann::Select<arma::Mat, arma::Mat >; T31 = mlpack::ann::Sequential<arma::Mat, arma::Mat >; T32 = mlpack::ann::VRClassReward<arma::Mat, arma::Mat >; T33 = boost::detail::variant::void_; T34 = boost::detail::variant::void_; T35 = boost::detail::variant::void_; T36 = boost::detail::variant::void_; T37 = boost::detail::variant::void_; T38 = boost::detail::variant::void_; T39 = boost::detail::variant::void_; typename Visitor::result_type = long unsigned int]’
/usr/include/boost/variant/variant.hpp:2337:13: required from ‘typename Visitor::result_type boost::variant<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39>::internal_apply_visitor(Visitor&) [with Visitor = boost::detail::variant::invoke_visitor; T0_ = mlpack::ann::Add<arma::Mat, arma::Mat >
; T1 = mlpack::ann::AddMerge<arma::Mat, arma::Mat >; T2 = mlpack::ann::BaseLayer<mlpack::ann::LogisticFunction, arma::Mat, arma::Mat >; T3 = mlpack::ann::BaseLayer<mlpack::ann::IdentityFunction, arma::Mat, arma::Mat >; T4 = mlpack::ann::BaseLayer<mlpack::ann::TanhFunction, arma::Mat, arma::Mat >; T5 = mlpack::ann::BaseLayer<mlpack::ann::RectifierFunction, arma::Mat, arma::Mat >; T6 = mlpack::ann::Concat<arma::Mat, arma::Mat >; T7 = mlpack::ann::ConcatPerformance<mlpack::ann::NegativeLogLikelihood<arma::Mat, arma::Mat >, arma::Mat, arma::Mat >; T8 = mlpack::ann::Constant<arma::Mat, arma::Mat >; T9 = mlpack::ann::Convolution<mlpack::ann::NaiveConvolutionmlpack::ann::ValidConvolution, mlpack::ann::NaiveConvolutionmlpack::ann::FullConvolution, mlpack::ann::NaiveConvolutionmlpack::ann::ValidConvolution, arma::Mat, arma::Mat >; T10 = mlpack::ann::DropConnect<arma::Mat, arma::Mat >; T11 = mlpack::ann::Dropout<arma::Mat, arma::Mat >; T12 = mlpack::ann::Glimpse<arma::Mat, arma::Mat >; T13 = mlpack::ann::HardTanH<arma::Mat, arma::Mat >; T14 = mlpack::ann::Join<arma::Mat, arma::Mat >; T15 = mlpack::ann::LeakyReLU<arma::Mat, arma::Mat >; T16 = mlpack::ann::Linear<arma::Mat, arma::Mat >; T17 = mlpack::ann::LinearNoBias<arma::Mat, arma::Mat >; T18 = mlpack::ann::LogSoftMax<arma::Mat, arma::Mat >; T19 = mlpack::ann::Lookup<arma::Mat, arma::Mat >; T20 = mlpack::ann::LSTM<arma::Mat, arma::Mat >; T21 = mlpack::ann::MaxPooling<arma::Mat, arma::Mat >; T22 = mlpack::ann::MeanPooling<arma::Mat, arma::Mat >; T23 = mlpack::ann::MeanSquaredError<arma::Mat, arma::Mat >; T24 = mlpack::ann::MultiplyConstant<arma::Mat, arma::Mat >; T25 = mlpack::ann::NegativeLogLikelihood<arma::Mat, arma::Mat >; T26 = mlpack::ann::PReLU<arma::Mat, arma::Mat >; T27 = mlpack::ann::Recurrent<arma::Mat, arma::Mat >; T28 = mlpack::ann::RecurrentAttention<arma::Mat, arma::Mat >; T29 = mlpack::ann::ReinforceNormal<arma::Mat, arma::Mat >; T30 = mlpack::ann::Select<arma::Mat, arma::Mat >; T31 = mlpack::ann::Sequential<arma::Mat, arma::Mat >; T32 = mlpack::ann::VRClassReward<arma::Mat, arma::Mat >; T33 = boost::detail::variant::void_; T34 = boost::detail::variant::void_; T35 = boost::detail::variant::void_; T36 = boost::detail::variant::void_; T37 = boost::detail::variant::void_; T38 = boost::detail::variant::void_; T39 = boost::detail::variant::void_; typename Visitor::result_type = long unsigned int]’
/usr/include/boost/variant/variant.hpp:2360:52: required from ‘typename Visitor::result_type boost::variant<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39>::apply_visitor(Visitor&) [with Visitor = const mlpack::ann::FanInVisitor; T0_ = mlpack::ann::Add<arma::Mat, arma::Mat >; T1 = mlpack::ann::AddMerge<arma::Mat, arma::Mat >; T2 = mlpack::ann::BaseLayer<mlpack::ann::LogisticFunction, arma::Mat, arma::Mat >; T3 = mlpack::ann::BaseLayer<mlpack::ann::IdentityFunction, arma::Mat, arma::Mat >; T4 = mlpack::ann::BaseLayer<mlpack::ann::TanhFunction, arma::Mat, arma::Mat >; T5 = mlpack::ann::BaseLayer<mlpack::ann::RectifierFunction, arma::Mat, arma::Mat >; T6 = mlpack::ann::Concat<arma::Mat, arma::Mat >; T7 = mlpack::ann::ConcatPerformance<mlpack::ann::NegativeLogLikelihood<arma::Mat, arma::Mat >, arma::Mat, arma::Mat >; T8 = mlpack::ann::Constant<arma::Mat, arma::Mat >; T9 = mlpack::ann::Convolution<mlpack::ann::NaiveConvolutionmlpack::ann::ValidConvolution, mlpack::ann::NaiveConvolutionmlpack::ann::FullConvolution, mlpack::ann::NaiveConvolutionmlpack::ann::ValidConvolution, arma::Mat, arma::Mat >; T10 = mlpack::ann::DropConnect<arma::Mat, arma::Mat >; T11 = mlpack::ann::Dropout<arma::Mat, arma::Mat >; T12 = mlpack::ann::Glimpse<arma::Mat, arma::Mat >; T13 = mlpack::ann::HardTanH<arma::Mat, arma::Mat >; T14 = mlpack::ann::Join<arma::Mat, arma::Mat >; T15 = mlpack::ann::LeakyReLU<arma::Mat, arma::Mat >; T16 = mlpack::ann::Linear<arma::Mat, arma::Mat >; T17 = mlpack::ann::LinearNoBias<arma::Mat, arma::Mat >; T18 = mlpack::ann::LogSoftMax<arma::Mat, arma::Mat >; T19 = mlpack::ann::Lookup<arma::Mat, arma::Mat >; T20 = mlpack::ann::LSTM<arma::Mat, arma::Mat >; T21 = mlpack::ann::MaxPooling<arma::Mat, arma::Mat >; T22 = mlpack::ann::MeanPooling<arma::Mat, arma::Mat >; T23 = mlpack::ann::MeanSquaredError<arma::Mat, arma::Mat >; T24 = mlpack::ann::MultiplyConstant<arma::Mat, arma::Mat >; T25 = mlpack::ann::NegativeLogLikelihood<arma::Mat, arma::Mat >; T26 = mlpack::ann::PReLU<arma::Mat, arma::Mat >; T27 = mlpack::ann::Recurrent<arma::Mat, arma::Mat >; T28 = mlpack::ann::RecurrentAttention<arma::Mat, arma::Mat >; T29 = mlpack::ann::ReinforceNormal<arma::Mat, arma::Mat >; T30 = mlpack::ann::Select<arma::Mat, arma::Mat >; T31 = mlpack::ann::Sequential<arma::Mat, arma::Mat >; T32 = mlpack::ann::VRClassReward<arma::Mat, arma::Mat >; T33 = boost::detail::variant::void_; T34 = boost::detail::variant::void_; T35 = boost::detail::variant::void_; T36 = boost::detail::variant::void_; T37 = boost::detail::variant::void_; T38 = boost::detail::variant::void_; T39 = boost::detail::variant::void_; typename Visitor::result_type = long unsigned int]’
/usr/include/boost/variant/detail/apply_visitor_unary.hpp:76:43: required from ‘typename Visitor::result_type boost::apply_visitor(const Visitor&, Visitable&) [with Visitor = mlpack::ann::FanInVisitor; Visitable = boost::variant<mlpack::ann::Add<arma::Mat, arma::Mat >
, mlpack::ann::AddMerge<arma::Mat, arma::Mat >, mlpack::ann::BaseLayer<mlpack::ann::LogisticFunction, arma::Mat, arma::Mat >, mlpack::ann::BaseLayer<mlpack::ann::IdentityFunction, arma::Mat, arma::Mat >, mlpack::ann::BaseLayer<mlpack::ann::TanhFunction, arma::Mat, arma::Mat >, mlpack::ann::BaseLayer<mlpack::ann::RectifierFunction, arma::Mat, arma::Mat >, mlpack::ann::Concat<arma::Mat, arma::Mat >, mlpack::ann::ConcatPerformance<mlpack::ann::NegativeLogLikelihood<arma::Mat, arma::Mat >, arma::Mat, arma::Mat >, mlpack::ann::Constant<arma::Mat, arma::Mat >, mlpack::ann::Convolution<mlpack::ann::NaiveConvolutionmlpack::ann::ValidConvolution, mlpack::ann::NaiveConvolutionmlpack::ann::FullConvolution, mlpack::ann::NaiveConvolutionmlpack::ann::ValidConvolution, arma::Mat, arma::Mat >, mlpack::ann::DropConnect<arma::Mat, arma::Mat >, mlpack::ann::Dropout<arma::Mat, arma::Mat >, mlpack::ann::Glimpse<arma::Mat, arma::Mat >, mlpack::ann::HardTanH<arma::Mat, arma::Mat >, mlpack::ann::Join<arma::Mat, arma::Mat >, mlpack::ann::LeakyReLU<arma::Mat, arma::Mat >, mlpack::ann::Linear<arma::Mat, arma::Mat >, mlpack::ann::LinearNoBias<arma::Mat, arma::Mat >, mlpack::ann::LogSoftMax<arma::Mat, arma::Mat >, mlpack::ann::Lookup<arma::Mat, arma::Mat >, mlpack::ann::LSTM<arma::Mat, arma::Mat >, mlpack::ann::MaxPooling<arma::Mat, arma::Mat >, mlpack::ann::MeanPooling<arma::Mat, arma::Mat >, mlpack::ann::MeanSquaredError<arma::Mat, arma::Mat >, mlpack::ann::MultiplyConstant<arma::Mat, arma::Mat >, mlpack::ann::NegativeLogLikelihood<arma::Mat, arma::Mat >, mlpack::ann::PReLU<arma::Mat, arma::Mat >, mlpack::ann::Recurrent<arma::Mat, arma::Mat >, mlpack::ann::RecurrentAttention<arma::Mat, arma::Mat >, mlpack::ann::ReinforceNormal<arma::Mat, arma::Mat >, mlpack::ann::Select<arma::Mat, arma::Mat >, mlpack::ann::Sequential<arma::Mat, arma::Mat >, mlpack::ann::VRClassReward<arma::Mat

@zoq
Copy link

zoq commented Mar 5, 2017

//! FanIN Visitor visitor class.
template<typename LayerType>
inline size_t FanInVisitor::operator()(LayerType* layer) const
{
  return LayerFanIn(layer, layer->OutputParameter());
}

template<typename T, typename P>
inline typename std::enable_if<
    !HasParametersCheck<T, P&(T::*)()>::value, size_t>::type
FanInVisitor::LayerFanIn(T* /* layer */, P& /* output */) const
{
  return 0;
}

template<typename T, typename P>
inline typename std::enable_if<
    HasParametersCheck<T, P&(T::*)()>::value, size_t>::type
FanInVisitor::LayerFanIn(T* layer, P& /* output */) const
{
 return layer->Parameters().n_rows();
}

@zoq
Copy link

zoq commented Mar 5, 2017

We have to pass layer->OutputParameter() to deduce the type of P, as you already pointed out.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment