예제 #1
0
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)])
예제 #2
0
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)
    ])
예제 #3
0
    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())
예제 #4
0
def TanhTransform():
    return transforms.ComposeTransform([
        transforms.AffineTransform(loc=0., scale=2.),
        transforms.SigmoidTransform(),
        transforms.AffineTransform(loc=-1., scale=2.)
    ])