Comments (8)
A normal way to determine termination is to look at how close one are to fulfil the optimality conditions (For example the necessary KKT conditions). For unconstrained problems, this is simply how close to 0 the gradient is.
Maybe one could do somethings similar as in #50, where the termination rule keeps track of what it needs in order to stop, and simply returns some kind of scalar value which the algorithm can use to determine if it should terminate (in an unconstrained case, think of returning the mean or the worst case component of the gradient. If this is close to 0, we stop).
from odl.
Or keep track of the step length and stop when they fall below some threshold? Or use some discrepancy principle in the case of operator equations? The possibilities seem to be quite numerous also here.
from odl.
I was talking to @adler-j about this the other day, also related to what @kohr-h wrote in #76. Maybe the most common interface for termination rules is simply to answer the question: "should I stop?", by simply returning True
or Flase
? In this way one could write termination rules on discrepancy principles for Landweber, or check size of the gradient for simple unconstrained optimization problems.
from odl.
Yes, absolutely. I don't think there is any discussion on what a termination rule should return. My question or suggestion was more concerned with the input side. Some unification will be helpful there.
from odl.
We discussed having some kind of dictionary as input, with well specified names of what things should be called. The class can then check for the things it needs, perhaps residual
or current_function_value
, and if they don't exist we throw an error (duck-typing style).
from odl.
I think dictionaries with standardized key names are a good and lightweight way to start. One thing we have to think about is how we specify how many of some quantity we need to store and how we update the state dictionary. For example, methods which use approximate Hessians usually need the previous and current gradients, while others may only require the current one. Storing everything is not a solution, of course, so somehow a method has to communicate with its step length and termination rules and "negotiate" the minimal amount of stored arrays.
from odl.
How are we doing here. Do we honestly think this will happen at some point, and wouldn't it be better to simply open a new issue if that is the case?
from odl.
I don't see anyone doing it, and it's not really high prio currently. Agree to closing and re-opening when it becomes relevant again.
from odl.
Related Issues (20)
- fan2para
- scipy warning with BroadcastOperator and sparse matrices HOT 1
- Issue when using odl and import pytorch HOT 5
- FISTA for tomographic reconstruction HOT 6
- Do ADMM and PDHG algorithms have positivity constraints or padding?
- ImportError: cannot import name 'OperatorAsModule' from 'odl.contrib.torch' HOT 1
- Proximal of LInfty wrong? HOT 7
- pytorch autograd depreciated HOT 4
- FBP not scaled when PYFFTW_AVAILABLE is True HOT 4
- odl.tomo.backends.skimage_randon.skimage_radon_back_projector not compatible with skimage==0.19
- primal_dual_hybrid_gradient solver: why compute derivative ? HOT 1
- Reconstruct Mayo dataset - errors in importing statements
- odl.operator.operator.OpDomainError: unable to cast tensor to an element of the domain uniform_discr
- question about odl_torch.OperatorModule
- Error with compatibility with latest numpy version HOT 1
- RayTransform: ValueError: The 'astra_cuda' `impl` is not found. HOT 6
- The problem about indexing parallel2Dgeometry HOT 1
- BroadcastOperator doesn't work with scipy > 1.8.1 HOT 4
- AttributeError: module 'numpy' has no attribute 'object' HOT 3
- Python version HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from odl.