2 #ifndef OPENGM_LEARNABLE_LWEIGHTEDSUM_OF_FUNCTIONS_FUNCTION_HXX 3 #define OPENGM_LEARNABLE_LWEIGHTEDSUM_OF_FUNCTIONS_FUNCTION_HXX 27 template<
class T,
class I =
size_t,
class L =
size_t>
29 :
public opengm::FunctionBase<opengm::functions::learnable::LWeightedSumOfFunctions<T, I, L>, T, I, L>
39 const std::vector<size_t>& weightIDs,
43 L
shape(
const size_t)
const;
46 template<
class ITERATOR> T
operator()(ITERATOR)
const;
55 template<
class ITERATOR>
62 std::vector<marray::Marray<T> >
feat_;
68 template <class T, class I, class L>
72 const std::vector<L>& shape,
73 const opengm::learning::Weights<T>& weights,
74 const std::vector<size_t>& weightIDs,
75 const std::vector<marray::Marray<T> >& feat
77 : shape_(shape), weights_(&weights), weightIDs_(weightIDs),feat_(feat)
80 for(
size_t i=0; i<weightIDs_.size(); ++i){
87 template <class T, class I, class L>
96 template <
class T,
class I,
class L>
97 template <
class ITERATOR>
105 return feat_[weightNumber](begin);
108 template <
class T,
class I,
class L>
109 template <
class ITERATOR>
123 template <
class T,
class I,
class L>
132 template <
class T,
class I,
class L>
135 return shape_.size();
138 template <
class T,
class I,
class L>
152 template<
class T,
class I,
class L>
159 template<
class INDEX_OUTPUT_ITERATOR,
class VALUE_OUTPUT_ITERATOR>
161 template<
class INDEX_INPUT_ITERATOR,
class VALUE_INPUT_ITERATOR>
165 template<
class T,
class I,
class L>
172 template<
class T,
class I,
class L>
181 template<
class T,
class I,
class L>
190 template<
class T,
class I,
class L>
191 template<
class INDEX_OUTPUT_ITERATOR,
class VALUE_OUTPUT_ITERATOR >
196 INDEX_OUTPUT_ITERATOR indexOutIterator,
197 VALUE_OUTPUT_ITERATOR valueOutIterator
200 *indexOutIterator = src.
shape_.size();
202 for(
size_t i=0; i<src.
shape_.size();++i){
203 *indexOutIterator = src.
shape_[i];
218 for(
size_t j=0; j<src.
feat_[i].size();++j){
219 *valueOutIterator = src.
feat_[i](j);
225 template<
class T,
class I,
class L>
226 template<
class INDEX_INPUT_ITERATOR,
class VALUE_INPUT_ITERATOR >
230 INDEX_INPUT_ITERATOR indexInIterator,
231 VALUE_INPUT_ITERATOR valueInIterator,
235 size_t dim = *indexInIterator;
238 std::vector<L>
shape(dim);
239 for(
size_t i=0; i<dim;++i){
240 shape[i] = *indexInIterator;
241 size *= *indexInIterator;
245 size_t numW =*indexInIterator;
247 std::vector<size_t> parameterIDs(numW);
248 for(
size_t i=0; i<numW;++i){
249 parameterIDs[i] = *indexInIterator;
253 std::vector<marray::Marray<T> > feat(numW,
marray::Marray<T>(shape.begin(),shape.end()));
254 for(
size_t i=0; i<numW;++i){
255 for(
size_t j=0; j<
size;++j){
256 feat[i](j)=*valueInIterator;
264 #endif //OPENGM_LEARNABLE_LWEIGHTEDSUM_OF_FUNCTIONS_FUNCTION_HXX std::vector< size_t > weightIDs_
const opengm::learning::Weights< T > * weights_
Fallback implementation of member functions of OpenGM functions.
size_t numberOfWeights() const
I weightIndex(const size_t weightNumber) const
LWeightedSumOfFunctions()
T operator()(ITERATOR) const
#define OPENGM_ASSERT(expression)
L shape(const size_t) const
ValueType getWeight(const size_t pi) const
T weightGradient(size_t, ITERATOR) const
#define OPENGM_ASSERT_OP(a, op, b)
runtime assertion
const size_t FUNCTION_TYPE_ID_OFFSET
User-defined function have ids smaller than FUNCTION_TYPE_ID_OFFSET.
std::vector< marray::Marray< T > > feat_
Learnable weighted sum of feature-functions.
opengm::functions::learnable::LWeightedSumOfFunctions< T, I, L >::ValueType ValueType
void setWeights(const opengm::learning::Weights< T > &weights) const