'n_reflections': c['ndim_x'] }, name=f'perm_{i+1}')) nodes.append( Node(nodes[-1], AffineCoupling, { 'F_class': F_fully_connected, 'F_args': { 'internal_size': c['hidden_layer_sizes'] } }, name=f'ac_{i+1}')) nodes.append(OutputNode(nodes[-1], name='z')) model = ReversibleGraphNet(nodes, verbose=False) model.to(c['device']) model.params_trainable = list( filter(lambda p: p.requires_grad, model.parameters())) def model_inverse(test_z): return model([test_z], rev=True) c['model'] = model c['model_inverse'] = model_inverse # create namedtuple from config dictionary c = namedtuple("Configuration", c.keys())(*c.values())
for i in range(c['n_blocks']): if i > 0: x_lane.append(Node(x_lane[-1], HouseholderPerm, {'fixed': False, 'n_reflections': c['ndim_x']}, name=f'perm_{i}')) x_lane.append(Node(x_lane[-1], HierarchicalAffineCouplingBlock, {'c_internal': [c['hidden_layer_sizes'], c['hidden_layer_sizes']//2, c['hidden_layer_sizes']//4, c['hidden_layer_sizes']//8], 'max_splits': c['recursion_depth']}, name=f'hac_{i+1}')) x_lane.append(OutputNode(x_lane[-1], name='z')) model = ReversibleGraphNet(x_lane, verbose=False) model.to(c['device']) model.params_trainable = list(filter(lambda p: p.requires_grad, model.parameters())) def model_inverse(test_z): return model(test_z, rev=True) c['model'] = model c['model_inverse'] = model_inverse # create namedtuple from config dictionary c = namedtuple("Configuration",c.keys())(*c.values())