2 #ifndef OPENGM_FoE_FUNCTION_HXX 3 #define OPENGM_FoE_FUNCTION_HXX 19 template<
class T,
class I =
size_t,
class L =
size_t>
21 :
public FunctionBase<FoEFunction<T, I, L>, T, size_t, size_t>
28 FoEFunction(
const std::vector<T>&,
const std::vector<T>&,
const L);
30 FoEFunction(IT, IT,
const L,
const I,
const size_t);
32 LabelType
shape(
const size_t)
const;
35 template<
class ITERATOR> ValueType
operator()(ITERATOR)
const;
44 mutable std::vector<T>
l_;
51 template<
class T,
class I,
class L>
59 template<
class T,
class I,
class L>
66 template<
class INDEX_OUTPUT_ITERATOR,
class VALUE_OUTPUT_ITERATOR>
67 static void serialize(
const FoEFunction<T, I, L>&, INDEX_OUTPUT_ITERATOR, VALUE_OUTPUT_ITERATOR);
68 template<
class INDEX_INPUT_ITERATOR,
class VALUE_INPUT_ITERATOR>
74 template <
class T,
class I,
class L>
86 template <
class T,
class I,
class L>
94 const double a_alpha[3] = {0.586612685392731, 1.157638405566669, 0.846059486257292};
95 const double a_expert[3][4] = {
96 {-0.0582774013402734, 0.0339010363051084, -0.0501593018104054, 0.0745568557931712},
97 {0.0492112815304123, -0.0307820846538285, -0.123247230948424, 0.104812330861557},
98 {0.0562633568728865, 0.0152832583489560, -0.0576215592718086, -0.0139673758425540}
100 for(
size_t e=0; e<3; ++e){
103 for(
size_t i=0; i<4;++i){
117 template <
class T,
class I,
class L>
120 (
const std::vector<T>& e,
const std::vector<T>& a,
const L numL)
125 order_ = e.size()/a.size();
134 template <
class T,
class I,
class L>
140 experts_.resize(numVars*numExperts);
143 for(
size_t i=0; i<numVars*numExperts; ++i,++ite)
145 for(
size_t i=0; i<numExperts; ++i,++ita)
150 template <
class T,
class I,
class L>
151 template <
class ITERATOR>
158 for (
size_t j = 0; j <
order_; ++j) {
159 l_[j] =
static_cast<T
>(*begin);
165 for (
size_t e = 0; e <
alphas_.size(); ++e) {
167 for (
size_t j = 0; j <
order_; ++j,++i) {
170 val +=
alphas_[e] * std::log(1 + 0.5 * dot * dot);
175 template <
class T,
class I,
class L>
185 template <
class T,
class I,
class L>
191 template <
class T,
class I,
class L>
200 template<
class T,
class I,
class L>
209 template<
class T,
class I,
class L>
218 template<
class T,
class I,
class L>
219 template<
class INDEX_OUTPUT_ITERATOR,
class VALUE_OUTPUT_ITERATOR >
224 INDEX_OUTPUT_ITERATOR indexOutIterator,
225 VALUE_OUTPUT_ITERATOR valueOutIterator
227 for(
size_t i=0; i<src.
experts_.size(); ++i){
228 *valueOutIterator = src.
experts_[i];
231 std::cout <<std::endl;
232 for(
size_t i=0; i<src.
alphas_.size(); ++i){
233 *valueOutIterator = src.
alphas_[i];
237 *indexOutIterator = src.
alphas_.size();
239 *indexOutIterator = src.
order_;
244 template<
class T,
class I,
class L>
245 template<
class INDEX_INPUT_ITERATOR,
class VALUE_INPUT_ITERATOR >
249 INDEX_INPUT_ITERATOR indexInIterator,
250 VALUE_INPUT_ITERATOR valueInIterator,
253 size_t numExperts = *indexInIterator;
255 size_t order = *indexInIterator;
257 size_t numLabels = *indexInIterator;
259 std::vector<T> alphas(numExperts);
260 std::vector<T> experts(numExperts*order);
262 for(
size_t i=0; i<numExperts*order; ++i){
263 experts[i] = *valueInIterator;
266 for(
size_t i=0; i<numExperts; ++i){
267 alphas[i] = *valueInIterator;
276 #endif // #ifndef OPENGM_FoE_FUNCTION_HXX
Fallback implementation of member functions of OpenGM functions.
FoEFunction()
constructor for demo function
ValueType operator()(ITERATOR) const
Field of Expert function.
#define OPENGM_ASSERT(expression)
LabelType shape(const size_t) const
std::vector< T > experts_
const size_t FUNCTION_TYPE_ID_OFFSET
User-defined function have ids smaller than FUNCTION_TYPE_ID_OFFSET.