예제 #1
0
    def forward(self, v, v2=None):
        """v: tower to build. v2: image of tower we have built so far"""
        # insert batch if it is not already there
        if len(v.shape) == 3:
            v = np.expand_dims(v, 0)
            inserted_batch = True
            if v2 is not None:
                assert len(v2.shape) == 3
                v2 = np.expand_dims(v2, 0)
        elif len(v.shape) == 4:
            inserted_batch = False
            pass
        else:
            assert False, "v has the shape %s" % (str(v.shape))

        if v2 is None: v2 = np.zeros(v.shape)

        v = np.concatenate((v, v2), axis=3)
        v = np.transpose(v, (0, 3, 1, 2))
        assert v.shape == (v.shape[0], 6, self.inputImageDimension,
                           self.inputImageDimension)
        v = variable(v, cuda=self.CUDA).float()
        window = int(self.inputImageDimension / self.resizedDimension)
        v = F.avg_pool2d(v, (window, window))
        #showArrayAsImage(np.transpose(v.data.numpy()[0,:3,:,:],[1,2,0]))
        v = self.encoder(v)
        if inserted_batch:
            return v.view(-1)
        else:
            return v
예제 #2
0
 def forward(self, v):
     assert len(v) == self.inputImageDimension*self.inputImageDimension
     floatOnlyTask = list(map(float, v))
     reshaped = [floatOnlyTask[i:i + self.inputImageDimension]
                 for i in range(0, len(floatOnlyTask), self.inputImageDimension)]
     v = variable(reshaped).float()
     # insert channel and batch
     v = torch.unsqueeze(v, 0)
     v = torch.unsqueeze(v, 0)
     v = maybe_cuda(v, next(self.parameters()).is_cuda)/256.
     window = int(self.inputImageDimension/self.resizedDimension)
     v = F.avg_pool2d(v, (window,window))
     v = self.encoder(v)
     return v.view(-1)