Advanced Computing Platform for Theoretical Physics

Commit 8142d3c7 authored by Justin Bayer's avatar Justin Bayer
Browse files

Merge branch 'master' of https://github.com/superbobry/climin into superbobry-master

parents 94ff9f8b 2d925848
......@@ -2,6 +2,7 @@ language: python
sudo: false
python:
- "2.7"
- "3.4"
addons:
apt:
packages:
......
from __future__ import absolute_import
# What follows is part of a hack to make control breaking work on windows even
# if scipy.stats ims imported. See:
# http://stackoverflow.com/questions/15457786/ctrl-c-crashes-python-after-importing-scipy-stats
import sys
import os
......@@ -9,13 +13,13 @@ if sys.platform == 'win32':
ctypes.CDLL(os.path.join(basepath, 'core', 'libmmd.dll'))
ctypes.CDLL(os.path.join(basepath, 'core', 'libifcoremd.dll'))
from bfgs import Bfgs, Lbfgs, Sbfgs
from cg import ConjugateGradient, NonlinearConjugateGradient
from gd import GradientDescent
from nes import Xnes
from rmsprop import RmsProp
from rprop import Rprop
from smd import Smd
from asgd import Asgd
from adadelta import Adadelta
from adam import Adam
from .adadelta import Adadelta
from .adam import Adam
from .asgd import Asgd
from .bfgs import Bfgs, Lbfgs, Sbfgs
from .cg import ConjugateGradient, NonlinearConjugateGradient
from .gd import GradientDescent
from .nes import Xnes
from .rmsprop import RmsProp
from .rprop import Rprop
from .smd import Smd
......@@ -2,9 +2,10 @@
"""This module provides an implementation of adadelta."""
from __future__ import absolute_import
from base import Minimizer
from mathadapt import sqrt, ones_like, clip
from .base import Minimizer
from .mathadapt import sqrt, ones_like, clip
class Adadelta(Minimizer):
......
......@@ -2,10 +2,11 @@
"""This module provides an implementation of Adam."""
from __future__ import absolute_import
import warnings
from base import Minimizer
from mathadapt import sqrt, ones_like, clip
from .base import Minimizer
class Adam(Minimizer):
......
......@@ -3,7 +3,9 @@
# TODO: document module
# TODO: check if gnumpy compatible
from base import Minimizer
from __future__ import absolute_import
from .base import Minimizer
class Asgd(Minimizer):
......
......@@ -2,6 +2,7 @@
import itertools
import collections
import numpy as np
......
......@@ -32,6 +32,8 @@ where :math:`\\alpha_t` is obtained with a line search.
"""
from __future__ import absolute_import
import warnings
import scipy
......@@ -39,8 +41,8 @@ import numpy as np
import scipy.linalg
import scipy.optimize
from base import Minimizer, is_nonzerofinite
from linesearch import WolfeLineSearch
from .base import Minimizer, is_nonzerofinite
from .linesearch import WolfeLineSearch
class Bfgs(Minimizer):
......@@ -139,7 +141,7 @@ class Bfgs(Minimizer):
return direction, {'gradient_diff': grad_diff}
def __iter__(self):
args, kwargs = self.args.next()
args, kwargs = next(self.args)
grad = self.fprime(self.wrt, *args, **kwargs)
grad_m1 = scipy.zeros(grad.shape)
......@@ -332,7 +334,7 @@ class Lbfgs(Minimizer):
return z, {}
def __iter__(self):
args, kwargs = self.args.next()
args, kwargs = next(self.args)
grad = self.fprime(self.wrt, *args, **kwargs)
grad_m1 = scipy.zeros(grad.shape)
factor_shape = self.n_factors, self.wrt.shape[0]
......
......@@ -32,15 +32,17 @@ reset from time to time. Additionally, we need to perform a line search to solve
for :math:`\\alpha_t`.
"""
from __future__ import absolute_import
import warnings
import scipy
import numpy as np
import scipy
import scipy.linalg
import scipy.optimize
from base import Minimizer, is_nonzerofinite
from linesearch import WolfeLineSearch
from .base import Minimizer, is_nonzerofinite
from .linesearch import WolfeLineSearch
class ConjugateGradient(Minimizer):
......@@ -282,7 +284,7 @@ class NonlinearConjugateGradient(Minimizer):
return direction, {}
def __iter__(self):
args, kwargs = self.args.next()
args, kwargs = next(self.args)
grad = self.fprime(self.wrt, *args, **kwargs)
grad_m1 = np.zeros(grad.shape)
loss = self.f(self.wrt, *args, **kwargs)
......
import sys
if sys.version_info[0] == 2:
range = xrange
else:
from builtins import range
basestring = str
......@@ -3,8 +3,9 @@
"""This module provides an implementation of gradient descent."""
from __future__ import absolute_import
from base import Minimizer
from .base import Minimizer
class GradientDescent(Minimizer):
......
......@@ -3,11 +3,14 @@
"""Module that contains functionality to initialize parameters to starting
values."""
from __future__ import absolute_import
import random
import numpy as np
import climin.mathadapt as ma
from . import mathadapt as ma
from .compat import range
def sparsify_columns(arr, n_non_zero, keep_diagonal=False, random_state=None):
......@@ -51,7 +54,7 @@ def sparsify_columns(arr, n_non_zero, keep_diagonal=False, random_state=None):
arr_np = arr if isinstance(arr, np.ndarray) else arr.as_numpy_array()
mask = np.ones_like(arr_np)
for i in range(arr.shape[1]):
idxs = xrange(colsize)
idxs = range(colsize)
if random_state is None:
zeros = random.sample(idxs, colsize - n_non_zero)
else:
......
......@@ -9,12 +9,15 @@ one-dimensional optimization problem, which can then be solved by a line search.
# TODO: this module needs lots of pep8 love.
from __future__ import absolute_import
import itertools
import scipy.optimize
import numpy as np
import scipy as sp
import scipy.optimize
from .compat import range
class LineSearch(object):
......@@ -372,21 +375,21 @@ def polyinterp(points, xminBound=None, xmaxBound=None):
# Constraints based on available function values
for i in range(points.shape[0]):
if np.isreal(points[i, 1]):
A[i] = [points[i, 0] ** (order - j) for j in xrange(order + 1)]
A[i] = [points[i, 0] ** (order - j) for j in range(order + 1)]
b[i] = points[i, 1]
points[i, 0], points[i, 1]
# Constraints based on available derivatives
for i, p in enumerate(points[:, 2]):
if np.isreal(p):
A[nPoints + i] = [(order - j + 1) * points[i, 0] ** (order - j)
for j in xrange(1, order + 1)] + [0]
for j in range(1, order + 1)] + [0]
b[nPoints + i] = points[i, 2]
#
# Find interpolating polynomial
params = np.linalg.lstsq(A, b)[0].flatten()
# Compute critical points
dParams = [(order - j) * params[j] for j in xrange(order)]
dParams = [(order - j) * params[j] for j in range(order)]
cp = [xminBound, xmaxBound] + list(points[:, 0])
if not np.any(np.isinf(dParams)):
......
......@@ -28,11 +28,12 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
from __future__ import absolute_import
import scipy
import scipy.linalg
from base import Minimizer
from .base import Minimizer
class Xnes(Minimizer):
......
......@@ -2,10 +2,11 @@
"""Module that contains projection operators."""
from __future__ import absolute_import
import numpy as np
from mathadapt import sqrt
from .mathadapt import sqrt
def max_length_columns(arr, max_length):
......
......@@ -2,11 +2,12 @@
"""This module provides an implementation of rmsprop."""
from __future__ import absolute_import
import numpy as np
from base import Minimizer
from mathadapt import sqrt, ones_like, clip
from .base import Minimizer
from .mathadapt import sqrt, ones_like, clip
class RmsProp(Minimizer):
......
......@@ -2,11 +2,10 @@
"""This module contains the Resilient propagation optimizer."""
from __future__ import absolute_import
import mathadapt as ma
from base import Minimizer
from . import mathadapt as ma
from .base import Minimizer
class Rprop(Minimizer):
......
......@@ -25,7 +25,7 @@ def decaying(start, decay):
>>> from climin.schedule import decaying
>>> s = decaying(10, .9)
>>> [s.next() for i in range(5)]
>>> [next(s) for i in range(5)]
[10.0, 9.0, 8.100000000000001, 7.290000000000001, 6.561]
"""
return (start * decay ** i for i in itertools.count(0))
......@@ -42,7 +42,7 @@ def linear_annealing(start, stop, n_steps):
>>> from climin.schedule import linear_annealing
>>> s = linear_annealing(1, 0, 4)
>>> [s.next() for i in range(10)]
>>> [next(s) for i in range(10)]
[1.0, 0.75, 0.5, 0.25, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
"""
start, stop = float(start), float(stop)
......@@ -62,7 +62,7 @@ def repeater(iter, n):
>>> from climin.schedule import repeater
>>> s = repeater([1, 2, 3], 2)
>>> [s.next() for i in range(6)]
>>> [next(s) for i in range(6)]
[1, 1, 2, 2, 3, 3]
"""
for i in iter:
......@@ -79,7 +79,7 @@ class SutskeverBlend(object):
>>> from climin.schedule import SutskeverBlend
>>> s = iter(SutskeverBlend(0.9, 2))
>>> [s.next() for i in range(10)]
>>> [next(s) for i in range(10)]
[0.5, 0.75, 0.75, 0.8333333333333333, 0.8333333333333333, 0.875, 0.875, 0.9, 0.9, 0.9]
.. [sutskever2013importance] On the importance of initialization and
......
......@@ -2,11 +2,13 @@
# TODO document
from __future__ import absolute_import
import warnings
import numpy as np
from base import Minimizer, is_nonzerofinite
from .base import Minimizer, is_nonzerofinite
class Smd(Minimizer):
......
from stops import AfterNIterations
from stops import Any, All
from stops import ModuloNIterations
from stops import NotBetterThanAfter
from stops import TimeElapsed
from stops import Patience
from stops import OnSignal
from stops import never, always
from stops import AfterNIterations
from __future__ import absolute_import
from .stops import AfterNIterations
from .stops import Any, All
from .stops import ModuloNIterations
from .stops import NotBetterThanAfter
from .stops import TimeElapsed
from .stops import Patience
from .stops import OnSignal
from .stops import never, always
from .stops import AfterNIterations
......@@ -25,12 +25,15 @@ a common API with functions which are supposed to have a state, which can be
realized by generator functions or objects with a ``__call__`` magic method.
"""
from __future__ import absolute_import
import itertools
import signal
import sys
import time
from ..compat import basestring
class AfterNIterations(object):
"""AfterNIterations class.
......@@ -246,7 +249,7 @@ class Patience(object):
def __call__(self, info):
i = info['n_iter']
if isinstance(self.func_or_key, (str, unicode)):
if isinstance(self.func_or_key, basestring):
loss = info[self.func_or_key]
else:
loss = self.func_or_key()
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment