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
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
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
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