def collate(self, batch, is_train=True):
     if is_train:
         packer = Packer([x['teller_tokens_in'] for x in batch])
         return {
             'packer':
             packer,
             'brw_teller_tokens_in':
             packer.brw_from_list([x['teller_tokens_in']
                                   for x in batch]).to(cuda_if_available),
             'brw_teller_counts_in':
             packer.brw_from_list([x['teller_counts_in']
                                   for x in batch]).to(cuda_if_available),
             'brw_teller_tokens_out':
             packer.brw_from_list([x['teller_tokens_out']
                                   for x in batch]).to(cuda_if_available),
             'b_scene_tags':
             torch.stack([x['scene_tags']
                          for x in batch]).to(cuda_if_available),
             'b_scene_mask':
             torch.stack([x['scene_mask']
                          for x in batch]).to(cuda_if_available),
             'br_drawer_clipart_state':
             packer.br_from_list([x['drawer_clipart_state']
                                  for x in batch]).to(cuda_if_available),
         }
     else:
         return {
             'b_scene_tags':
             torch.stack([x['scene_tags']
                          for x in batch]).to(cuda_if_available),
             'b_scene_mask':
             torch.stack([x['scene_mask']
                          for x in batch]).to(cuda_if_available),
         }