def output_controller(self, x): # soft decision if self.soft_decision: return self.sigmoid(x) # stochastic hard decision: if self.stochastic: x = self.sigmoid(x) return ops.ST_StochasticIndicator()(x) else: x = self.sigmoid(x) return ops.ST_Indicator()(x)
def forward(self, x): # convolution x = self.conv1(x) # spatial averaging and fully connected layer if self.ngf == 1: x = x.mean(dim=-1).mean(dim=-1).squeeze() else: x = F.relu(x) x = x.mean(dim=-1).mean(dim=-1).squeeze() # global average pooling x = self.linear1(x).squeeze() # get probability of "left" or "right" output = self.sigmoid(x) if self.soft_decision: return output if self.stochastic: return ops.ST_StochasticIndicator()(output) else: return ops.ST_Indicator()(output)