def inverse(self, out_bij): """ irevnet inverse """ out = split(out_bij) for i in range(len(self.stack)): out = self.stack[-1 - i].inverse(out) out = merge(out[0], out[1]) x = self.init_psi.inverse(out) return x
def inverse(self, x): """ bijective or injecitve block inverse """ x2, y1 = x[0], x[1] if self.stride == 2: x2 = self.psi.inverse(x2) Fx2 = -self.bottleneck_block(x2) x1 = Fx2 + y1 if self.stride == 2: x1 = self.psi.inverse(x1) if self.pad != 0 and self.stride == 1: x = merge(x1, x2) x = self.inj_pad.inverse(x) x1, x2 = split(x) x = (x1, x2) else: x = (x1, x2) return x
def inverse(self, x): out = split(x) for i in range(len(self.block_list)): out = self.stack[-1 - i].inverse(out) out = merge(out[0], out[1]) return out