def _transform_to_interval(constraint): # Handle the special case of the unit interval. lower_is_0 = isinstance(constraint.lower_bound, numbers.Number) and constraint.lower_bound == 0 upper_is_1 = isinstance(constraint.upper_bound, numbers.Number) and constraint.upper_bound == 1 if lower_is_0 and upper_is_1: return transforms.SigmoidTransform() loc = constraint.lower_bound scale = constraint.upper_bound - constraint.lower_bound return transforms.ComposeTransform([transforms.SigmoidTransform(), transforms.AffineTransform(loc, scale)])
def _transform_to_interval(constraint): loc = constraint.lower_bound scale = constraint.upper_bound - constraint.lower_bound return transforms.ComposeTransform([ transforms.SigmoidTransform(), transforms.AffineTransform(loc, scale) ])
return transforms.ComposeTransform( [transforms.ExpTransform(), transforms.AffineTransform(loc, scale)]) @biject_to.register(constraints.less_than) @transform_to.register(constraints.less_than) def _transform_to_less_than(constraint): loc = constraint.upper_bound scale = loc.new([-1]).expand_as(loc) return transforms.ComposeTransform( [transforms.ExpTransform(), transforms.AffineTransform(loc, scale)]) biject_to.register(constraints.unit_interval, transforms.SigmoidTransform()) transform_to.register(constraints.unit_interval, transforms.SigmoidTransform()) @biject_to.register(constraints.interval) @transform_to.register(constraints.interval) def _transform_to_interval(constraint): loc = constraint.lower_bound scale = constraint.upper_bound - constraint.lower_bound return transforms.ComposeTransform([ transforms.SigmoidTransform(), transforms.AffineTransform(loc, scale) ]) biject_to.register(constraints.simplex, transforms.StickBreakingTransform())
def TanhTransform(): return transforms.ComposeTransform([ transforms.AffineTransform(loc=0., scale=2.), transforms.SigmoidTransform(), transforms.AffineTransform(loc=-1., scale=2.) ])