Ejemplo n.º 1
0
def create_base_transform(i):
    if args.base_transform_type == 'rq':
        return transforms.PiecewiseRationalQuadraticCouplingTransform(
            mask=utils.create_alternating_binary_mask(features=dim,
                                                      even=(i % 2 == 0)),
            transform_net_create_fn=lambda in_features, out_features: nn_.
            ResidualNet(in_features=in_features,
                        out_features=out_features,
                        hidden_features=args.hidden_features,
                        num_blocks=args.num_transform_blocks,
                        dropout_probability=args.dropout_probability,
                        use_batch_norm=args.use_batch_norm),
            num_bins=args.num_bins,
            apply_unconditional_transform=False,
        )
    elif args.base_transform_type == 'affine':
        return transforms.AffineCouplingTransform(
            mask=utils.create_alternating_binary_mask(features=dim,
                                                      even=(i % 2 == 0)),
            transform_net_create_fn=lambda in_features, out_features: nn_.
            ResidualNet(in_features=in_features,
                        out_features=out_features,
                        hidden_features=args.hidden_features,
                        num_blocks=args.num_transform_blocks,
                        dropout_probability=args.dropout_probability,
                        use_batch_norm=args.use_batch_norm))
    else:
        raise ValueError
Ejemplo n.º 2
0
def create_base_transform(i):
    if args.base_transform_type == 'affine':
        return transforms.AffineCouplingTransform(
            mask=utils.create_alternating_binary_mask(features=dim,
                                                      even=(i % 2 == 0)),
            transform_net_create_fn=lambda in_features, out_features: nn_.
            ResidualNet(in_features=in_features,
                        out_features=out_features,
                        hidden_features=32,
                        num_blocks=2,
                        use_batch_norm=True))
    else:
        return transforms.PiecewiseRationalQuadraticCouplingTransform(
            mask=utils.create_alternating_binary_mask(features=dim,
                                                      even=(i % 2 == 0)),
            transform_net_create_fn=lambda in_features, out_features: nn_.
            ResidualNet(in_features=in_features,
                        out_features=out_features,
                        hidden_features=32,
                        num_blocks=2,
                        use_batch_norm=True),
            tails='linear',
            tail_bound=5,
            num_bins=args.num_bins,
            apply_unconditional_transform=False)
Ejemplo n.º 3
0
 def create_base_transform(i, context_features=None):
     if args.prior_type == 'affine-coupling':
         return transforms.AffineCouplingTransform(
             mask=utils.create_alternating_binary_mask(
                 features=args.latent_features, even=(i % 2 == 0)),
             transform_net_create_fn=lambda in_features, out_features: nn_.
             ResidualNet(in_features=in_features,
                         out_features=out_features,
                         hidden_features=args.hidden_features,
                         context_features=context_features,
                         num_blocks=args.num_transform_blocks,
                         activation=F.relu,
                         dropout_probability=args.dropout_probability,
                         use_batch_norm=args.use_batch_norm))
     elif args.prior_type == 'rq-coupling':
         return transforms.PiecewiseRationalQuadraticCouplingTransform(
             mask=utils.create_alternating_binary_mask(
                 features=args.latent_features, even=(i % 2 == 0)),
             transform_net_create_fn=lambda in_features, out_features: nn_.
             ResidualNet(in_features=in_features,
                         out_features=out_features,
                         hidden_features=args.hidden_features,
                         context_features=context_features,
                         num_blocks=args.num_transform_blocks,
                         activation=F.relu,
                         dropout_probability=args.dropout_probability,
                         use_batch_norm=args.use_batch_norm),
             num_bins=args.num_bins,
             tails='linear',
             tail_bound=args.tail_bound,
             apply_unconditional_transform=args.
             apply_unconditional_transform,
         )
     elif args.prior_type == 'affine-autoregressive':
         return transforms.MaskedAffineAutoregressiveTransform(
             features=args.latent_features,
             hidden_features=args.hidden_features,
             context_features=context_features,
             num_blocks=args.num_transform_blocks,
             use_residual_blocks=True,
             random_mask=False,
             activation=F.relu,
             dropout_probability=args.dropout_probability,
             use_batch_norm=args.use_batch_norm)
     elif args.prior_type == 'rq-autoregressive':
         return transforms.MaskedPiecewiseRationalQuadraticAutoregressiveTransform(
             features=args.latent_features,
             hidden_features=args.hidden_features,
             context_features=context_features,
             num_bins=args.num_bins,
             tails='linear',
             tail_bound=args.tail_bound,
             num_blocks=args.num_transform_blocks,
             use_residual_blocks=True,
             random_mask=False,
             activation=F.relu,
             dropout_probability=args.dropout_probability,
             use_batch_norm=args.use_batch_norm)
     else:
         raise ValueError
Ejemplo n.º 4
0
    def __init__(self, num_input_channels, num_hidden_layers,
                 num_hidden_channels, num_bins, tail_bound, activation,
                 dropout_probability, reverse_mask):
        def transform_net_create_fn(in_features, out_features):
            return ResidualNet(in_features=in_features,
                               out_features=out_features,
                               context_features=None,
                               hidden_features=num_hidden_channels,
                               num_blocks=num_hidden_layers,
                               activation=activation(),
                               dropout_probability=dropout_probability,
                               use_batch_norm=False)

        super().__init__(
            num_input_channels=num_input_channels,
            flow=PiecewiseRationalQuadraticCouplingTransform(
                mask=create_alternating_binary_mask(num_input_channels,
                                                    even=reverse_mask),
                transform_net_create_fn=transform_net_create_fn,
                num_bins=num_bins,
                tails='linear',
                tail_bound=tail_bound,

                # Setting True corresponds to equations (4), (5), (6) in the NSF paper:
                apply_unconditional_transform=True))
def create_base_transform(i):
    base_transform = transforms.PiecewiseCircularRationalQuadraticCouplingTransform_edge(
        mask=utils.create_alternating_binary_mask(feature_dim,
                                                  even=(i % 2 == 0)),
        transform_net_create_fn=lambda in_features, out_features: nn_.
        ResidualNet(in_features=in_features,
                    out_features=out_features,
                    hidden_features=args.hidden_features,
                    context_features=context_dim,
                    num_blocks=args.num_transform_blocks,
                    activation=F.relu,
                    dropout_probability=args.dropout_probability,
                    use_batch_norm=args.use_batch_norm),
        num_bins=args.num_bins,
        tails=None,
        apply_unconditional_transform=args.apply_unconditional_transform)
    return base_transform
Ejemplo n.º 6
0
#             transform_net_create_fn=lambda in_features, out_features: nn_.ResidualNet(
#                 in_features=in_features,
#                 out_features=out_features,
#                 hidden_features=32,
#                 num_blocks=2,
#                 use_batch_norm=True
#             ),
#             num_bins=args.num_bins,
#             apply_unconditional_transform=False
#     )
# ])

transform = transforms.CompositeTransform([
    # transforms.Sigmoid(),
    transforms.PiecewiseRationalLinearCouplingTransform(
            mask=utils.create_alternating_binary_mask(features=dim, even=True),
            transform_net_create_fn=lambda in_features, out_features: nn_.ResidualNet(
                in_features=in_features,
                out_features=out_features,
                hidden_features=32,
                num_blocks=2,
                use_batch_norm=True
            ),
            tails='linear',
            tail_bound=5,
            num_bins=args.num_bins,
            apply_unconditional_transform=False
    ),
    transforms.PiecewiseRationalLinearCouplingTransform(
            mask=utils.create_alternating_binary_mask(features=dim, even=False),
            transform_net_create_fn=lambda in_features, out_features: nn_.ResidualNet(
Ejemplo n.º 7
0
# Generate test grid data
num_points_per_axis = 512
bounds = np.array([[1e-3, 1 - 1e-3], [1e-3, 1 - 1e-3]])
grid_dataset = data_.TestGridDataset(num_points_per_axis=num_points_per_axis,
                                     bounds=bounds)
grid_loader = data.DataLoader(dataset=grid_dataset,
                              batch_size=1000,
                              drop_last=False)

# create model
distribution = uniform.TweakedUniform(low=torch.zeros(dim),
                                      high=torch.ones(dim))
transform = transforms.CompositeTransform([
    transforms.PiecewiseRationalLinearCouplingTransform(
        mask=utils.create_alternating_binary_mask(features=dim,
                                                  even=(i % 2 == 0)),
        transform_net_create_fn=lambda in_features, out_features: nn_.
        ResidualNet(in_features=in_features,
                    out_features=out_features,
                    hidden_features=args.hidden_features,
                    num_blocks=args.num_transform_blocks,
                    dropout_probability=args.dropout_probability,
                    use_batch_norm=args.use_batch_norm),
        num_bins=args.num_bins,
        tails=None,
        tail_bound=1,
        # apply_unconditional_transform=args.apply_unconditional_transform,
        min_bin_width=args.min_bin_width) for i in range(args.num_flow_steps)
])

flow = flows.Flow(transform, distribution).to(device)