inv_hessian = None if args.read_inv_hessian is not None: print( "optimize_metaparameters.py: reading inverse Hessian from {0}".format( args.read_inv_hessian), file=sys.stderr) inv_hessian = np.loadtxt(args.read_inv_hessian) if inv_hessian.shape != (len(x0), len(x0)): sys.exit("optimize_metaparameters.py: inverse Hessian from {0} " "has wrong shape.".format(args.read_inv_hessian), file=sys.stderr) (x, value, deriv, inv_hessian) = bfgs.Bfgs(x0, GetObjfAndDeriv, (lambda x: True), init_inv_hessian=inv_hessian, gradient_tolerance=args.gradient_tolerance, progress_tolerance=args.progress_tolerance, verbose=True) y = UnconstrainedToConstrained(x) print("optimize_metaparameters: final metaparameters are ", y, file=sys.stderr) if y[-4] < 0.1: sys.exit( "your dev set is probably in your training set; this is not advisable") WriteMetaparameters("{0}/final.metaparams".format(args.optimize_dir), y) old_objf = -1.0 * value0 new_objf = -1.0 * value print(
iteration = 0 # value0 will store the first evaluated objective function.a value0 = None inv_hessian = None if not args.read_inv_hessian is None: print("optimize_metaparameters.py: reading inverse Hessian from {0}".format( args.read_inv_hessian), file=sys.stderr) inv_hessian = np.loadtxt(args.read_inv_hessian) if inv_hessian.shape != (len(x0), len(x0)): sys.exit("optimize_metaparameters.py: inverse Hessian from {0} " "has wrong shape.".format(args.read_inv_hessian), file=sys.stderr) (x, value, deriv, inv_hessian) = bfgs.Bfgs(x0, GetObjfAndDeriv, MetaparametersAreAllowed, init_inv_hessian = inv_hessian, gradient_tolerance = args.gradient_tolerance, progress_tolerance = args.progress_tolerance) print("optimize_metaparameters: final metaparameters are ", x, file=sys.stderr) WriteMetaparameters("{0}/final.metaparams".format(args.optimize_dir), x) old_objf = -1.0 * value0 new_objf = -1.0 * value print("optimize_metaparameters.py: log-prob on dev data (with barrier function) increased " "from %.6f to %.6f over %d passes of derivative estimation (penalized perplexity: %.6f->%.6f" % (old_objf, new_objf, iteration, math.exp(-old_objf), math.exp(-new_objf)), file=sys.stderr) print("optimize_metaparameters.py: final perplexity without barrier function was %.6f "