TrainingProgress.h
Go to the documentation of this file.
1/*!
2 *
3 *
4 * \brief Stopping Criterion which stops, when the training error seems to converge
5 *
6 *
7 *
8 * \author O. Krause
9 * \date 2010
10 *
11 *
12 * \par Copyright 1995-2017 Shark Development Team
13 *
14 * <BR><HR>
15 * This file is part of Shark.
16 * <https://shark-ml.github.io/Shark/>
17 *
18 * Shark is free software: you can redistribute it and/or modify
19 * it under the terms of the GNU Lesser General Public License as published
20 * by the Free Software Foundation, either version 3 of the License, or
21 * (at your option) any later version.
22 *
23 * Shark is distributed in the hope that it will be useful,
24 * but WITHOUT ANY WARRANTY; without even the implied warranty of
25 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26 * GNU Lesser General Public License for more details.
27 *
28 * You should have received a copy of the GNU Lesser General Public License
29 * along with Shark. If not, see <http://www.gnu.org/licenses/>.
30 *
31 */
32
33#ifndef SHARK_TRAINERS_STOPPINGCRITERA_TRAININGPROGRESS_H
34#define SHARK_TRAINERS_STOPPINGCRITERA_TRAININGPROGRESS_H
35
38#include <queue>
39#include <numeric>
40#include <shark/LinAlg/Base.h>
41
42namespace shark{
43
44
45///\brief This stopping criterion tracks the improvement of the training error over an interval of iterations.
46///
47///If the mean performance over this strip divided by the minimum is too low, training is stopped. The difference to TrainingError
48///is, that this class tests the relative improvement of the error compared to the minimum training error,
49///while the TrainingError measures the absolute difference. This class is a bit better tuned to noisy error functions since it takes the
50///mean of the interval as comparison.
51///
52/// Terminology for this and other stopping criteria is taken from (and also see):
53///
54/// Lutz Prechelt. Early Stopping - but when? In Genevieve B. Orr and
55/// Klaus-Robert Müller: Neural Networks: Tricks of the Trade, volume
56/// 1524 of LNCS, Springer, 1997.
57///
58template<class PointType = RealVector>
59class TrainingProgress: public AbstractStoppingCriterion< SingleObjectiveResultSet<PointType> >{
60public:
62 ///constructs the TrainingProgress
63 ///@param intervalSize the size of the interval which is checked
64 ///@param minImprovement minimum relative improvement of the interval to the minimum training error before training stops
65 TrainingProgress(size_t intervalSize, double minImprovement){
66 m_minImprovement = minImprovement;
67 m_intervalSize = intervalSize;
68 reset();
69 }
70 /// returns true if training should stop
71 bool stop(const ResultSet& set){
72 m_minTraining = std::min(m_minTraining, set.value);
73
75 m_interval.push(set.value);
76 if(m_interval.size()>m_intervalSize){
78 m_interval.pop();
79 }
81
82 if(m_interval.size()<m_intervalSize){
83 return false;
84 }
85
86
88 }
89 ///resets the internal state
90 void reset(){
91 m_interval = std::queue<double>();
92 m_minTraining = 1.e10;
94 m_progress = 0.0;
95 }
96 ///returns current value of progress
97 double value()const{
98 return m_progress;
99 }
100protected:
101 ///minimum training error encountered
103 ///minimum improvement allowed before training stops
105 ///mean performance over the last intervalSize timesteps
107 ///current progress measure. if it is below minTraining, stop() will return true
109
110 ///current interval
111 std::queue<double> m_interval;
112 ///size of the interval
114};
115}
116
117
118#endif