Пример #1
0
    def forward(self, images):
        # TODO h_t, l_t should be random?
        # TODO rename log_pi / log_probas to make more sense

        log_pis = None
        baselines = None

        h_t = torch.zeros(images.shape[0], self.num_hidden_core, device=device)
        l_t = torch.Tensor(images.shape[0], 2, device=device).uniform_(-1, 1)

        for _ in range(self.num_glimpse):
            g_t = self.glimseNetwork(images=images, location_prev=l_t)
            h_t = self.coreNetwork(g_t=g_t, h_prev=h_t)
            mu, l_t = self.locationNetwork(h_t)
            b_t = self.baselineNetwork(h_t)
            baselines = append(baselines, b_t, dim=1)

            # we assume both dimensions are independent
            # 1. pdf of the joint is the product of the pdfs
            # 2. log of the product is the sum of the logs
            log_pi = torch.distributions.Normal(mu, self.std).log_prob(l_t)
            # This is log_prob in in Guassian Policy
            log_pi = torch.sum(log_pi, dim=1)
            log_pis = append(log_pis, log_pi)
        log_probas = self.actionNetwork(h_t)
        return log_probas, log_pis.transpose(1, 0), baselines.squeeze()
Пример #2
0
def preprocess(requests):
    #Splitting the requests into [METHOD, URL, PROTOCOL]
    #also dropping PROTOCOL
    requests = mapt(lambda r: r.split(" ")[0:-1], requests)
    print(requests[0])
    #Splitting URL into path and query string
    requests = mapt(lambda r: append([r[0]], r[1].split("?")), requests)
    print(requests[0])
    #Transform GET into 0 and POST into 1
    requests = mapt(lambda r: append([0] if r[0] == "GET" else [1], r[1:3]),
                    requests)
    print(requests[0])
    return requests
Пример #3
0
    def _glimp_patch(self, img, location, image_size):
        # TODO it is an inaccurate if image size is odd number.
        glimpse_images = None
        for i in range(self.num_zoom_image):
            current_img = img
            glimpse_half_size = int(self.retina_size * .5 * self.scale**i)
            top = int(location[0] - glimpse_half_size)
            bottom = int(location[0] + glimpse_half_size)
            left = int(location[1] - glimpse_half_size)
            right = int(location[1] + glimpse_half_size)

            if top < 0 or left < 0 or bottom > image_size or right > image_size:
                pad_dims = (
                    glimpse_half_size,
                    glimpse_half_size,
                    glimpse_half_size,
                    glimpse_half_size,
                )
                current_img = F.pad(current_img, pad_dims, "constant", 0)
                top += glimpse_half_size
                bottom += glimpse_half_size
                left += glimpse_half_size
                right += glimpse_half_size
            glimpse_images = append(
                glimpse_images,
                resize(current_img[:, top:bottom, left:right],
                       self.retina_size))
        return glimpse_images
Пример #4
0
 def foveate(self, imgs, locations):
     """
     Args
     ----
     imgs - (B, C, H, W)
     location - (B, H, W) [-1, 1]
     """
     glimpse_imgs = None
     image_size = imgs[0].shape[-1]
     denomalized_locations = (locations + 1) * .5 * image_size
     for i, img in enumerate(imgs):
         img = self._glimp_patch(img, denomalized_locations[i], image_size)
         glimpse_imgs = append(glimpse_imgs, img)
     return glimpse_imgs.view(glimpse_imgs.shape[0], -1)  # flatten
Пример #5
0
def encode_date(date):
    date_tuple = split_date(date)
    date_tuple = append(date_tuple, encode_month(date_tuple[1]))
    date_tuple = append(date_tuple, encode_weekday(weekday(date)))

    return date_tuple
Пример #6
0
def append3(a, b, c):
    return append(a, append(b, c))