Ejemplo n.º 1
0
def construct_discrete_model():

    chain = []
    for i in range(args.depth):
        if args.glow: chain.append(layers.BruteForceLayer(2))
        chain.append(layers.CouplingLayer(2, swap=i % 2 == 0))
    return layers.SequentialFlow(chain)
                    n_dist=args.n_dist,
                    n_power_series=args.n_power_series,
                    exact_trace=args.exact_trace,
                    brute_force=args.brute_force,
                    n_samples=args.n_samples,
                    neumann_grad=False,
                    grad_in_forward=False,
                )
            )
            if args.actnorm: blocks.append(layers.ActNorm1d(2))
            if args.batchnorm: blocks.append(layers.MovingBatchNorm1d(2))
        model = layers.SequentialFlow(blocks).to(device)
    elif args.arch == 'realnvp':
        blocks = []
        for _ in range(args.nblocks):
            blocks.append(layers.CouplingLayer(2, swap=False))
            blocks.append(layers.CouplingLayer(2, swap=True))
            if args.actnorm: blocks.append(layers.ActNorm1d(2))
            if args.batchnorm: blocks.append(layers.MovingBatchNorm1d(2))
        model = layers.SequentialFlow(blocks).to(device)

    logger.info(model)
    logger.info("Number of trainable parameters: {}".format(count_parameters(model)))

    #genGen = Generator(16)
    #genGen = Generator(128)

    genGen = Generator(8)

    #optimizer = optim.Adam(model.parameters(), lr=args.lr, weight_decay=args.weight_decay)