Exemple #1
0
def lbfgs_wz(model, w, z, x, hook=None, maxiter=None):
    
    def f(y):
        _w, _z = ndict.unflatten_multiple(y, [w, z])
        logpx, logpz = model.logpxz(_w, x, _z)
        return - (logpx.sum() + logpz.sum())
    
    def fprime(y):
        _w, _z = ndict.unflatten_multiple(y, [w, z])
        logpx, logpz, gw, gz = model.dlogpxz_dwz(_w, x, _z)
        gwz = ndict.flatten_multiple((gw, gz))
        return - gwz
    
    t = [0, 0, time.time()]
    def callback(wz):
        if hook is None: return
        _w, _z = ndict.unflatten_multiple(wz, (w, z))
        t[1] += 1
        hook(t[1], _w, _z)
    
    x0 = ndict.flatten_multiple((w, z))
    xn, f, d = scipy.optimize.fmin_l_bfgs_b(func=f, x0=x0, fprime=fprime, m=100, iprint=0, callback=callback, maxiter=maxiter)
    
    #scipy.optimize.fmin_cg(f=f, x0=x0, fprime=fprime, full_output=True, callback=hook)
    #scipy.optimize.fmin_ncg(f=f, x0=x0, fprime=fprime, full_output=True, callback=hook)
    w, z = ndict.unflatten_multiple(xn, (w, z))
    if d['warnflag'] is 2:
        print 'warnflag:', d['warnflag']
        print d['task']
    return w, z
Exemple #2
0
def lbfgs_wz(model, w, z, x, hook=None, maxiter=None):
    def f(y):
        _w, _z = ndict.unflatten_multiple(y, [w, z])
        logpx, logpz = model.logpxz(_w, x, _z)
        return -(logpx.sum() + logpz.sum())

    def fprime(y):
        _w, _z = ndict.unflatten_multiple(y, [w, z])
        logpx, logpz, gw, gz = model.dlogpxz_dwz(_w, x, _z)
        gwz = ndict.flatten_multiple((gw, gz))
        return -gwz

    t = [0, 0, time.time()]

    def callback(wz):
        if hook is None: return
        _w, _z = ndict.unflatten_multiple(wz, (w, z))
        t[1] += 1
        hook(t[1], _w, _z)

    x0 = ndict.flatten_multiple((w, z))
    xn, f, d = scipy.optimize.fmin_l_bfgs_b(func=f,
                                            x0=x0,
                                            fprime=fprime,
                                            m=100,
                                            iprint=0,
                                            callback=callback,
                                            maxiter=maxiter)

    #scipy.optimize.fmin_cg(f=f, x0=x0, fprime=fprime, full_output=True, callback=hook)
    #scipy.optimize.fmin_ncg(f=f, x0=x0, fprime=fprime, full_output=True, callback=hook)
    w, z = ndict.unflatten_multiple(xn, (w, z))
    if d['warnflag'] is 2:
        print 'warnflag:', d['warnflag']
        print d['task']
    return w, z
Exemple #3
0
 def fprime(y):
     _w, _z = ndict.unflatten_multiple(y, [w, z])
     logpx, logpz, gw, gz = model.dlogpxz_dwz(_w, x, _z)
     gwz = ndict.flatten_multiple((gw, gz))
     return -gwz
Exemple #4
0
 def fprime(y):
     _w, _z = ndict.unflatten_multiple(y, [w, z])
     logpx, logpz, gw, gz = model.dlogpxz_dwz(_w, x, _z)
     gwz = ndict.flatten_multiple((gw, gz))
     return - gwz