Как преобразовать int8 в его двоичное представление в pytorch? - PullRequest
0 голосов
/ 10 июля 2020

Учитывая тензор pytorch в dtype = int8:

tensor([[[-3, -6, -1],
         [-6, -10, -1, 
         [9, 9, 6],
         [[-4, -7, -3], 
          [-4, -6, -1], 
          [14, 16, 8]],
         [[-4, -6, -2],
          [-6, -9, -2],
          [9, 10, 5]]], device='cuda:0', dtype=torch.int8)

Как мне преобразовать вышеуказанный тензор в его двоичное представление? Я попытался преобразовать в numpy, чтобы использовать функцию np.unpackbits, но в качестве входных данных требуется только целое число без знака 8.

Ответы [ 2 ]

0 голосов
/ 11 июля 2020

Это требуемый результат, который я хочу:

tensor([[[[1., 1., 1., 1., 1., 1., 0., 1.],                                                                                                                                                                        
         [1., 1., 1., 1., 1., 0., 1., 0.],                                                                                                                                                                                    
          [1., 1., 1., 1., 1., 1., 1., 1.]],                                                                                                                                                                                                                                                                                                                                                                                                       
           [[1., 1., 1., 1., 1., 0., 1., 0.],                                                                                                                                                                                    
            [1., 1., 1., 1., 0., 1., 1., 0.],                                                                                                                                                                                    
            [1., 1., 1., 1., 1., 1., 1., 1.]],                                                                                                                                                                                                                                                                                                                                                                                                       
            [[0., 0., 0., 0., 1., 0., 0., 1.],                                                                                                                                                                                    
            [0., 0., 0., 0., 1., 0., 0., 1.],                                                                                                                                                                                    
            [0., 0., 0., 0., 0., 1., 1., 0.]]],                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
             [[[1., 1., 1., 1., 1., 1., 0., 0.],                                                                                                                                                                                    
              [1., 1., 1., 1., 1., 0., 0., 1.],                                                                                                                                                                                    
              [1., 1., 1., 1., 1., 1., 0., 1.]],                                                                                                                                                                                                                                                                                                                                                                                                       
              [[1., 1., 1., 1., 1., 1., 0., 0.],                                                                                                                                                                                    
              [1., 1., 1., 1., 1., 0., 1., 0.],                                                                                                                                                                                    
              [1., 1., 1., 1., 1., 1., 1., 1.]],                                                                                                                                                                                                                                                                                                                                                                                                       
              [[0., 0., 0., 0., 1., 1., 1., 0.],                                                                                                                                                                                    
              [0., 0., 0., 1., 0., 0., 0., 0.],                                                                                                                                                                                    
              [0., 0., 0., 0., 1., 0., 0., 0.]]],                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
             [[[1., 1., 1., 1., 1., 1., 0., 0.],                                                                                                                                                                                    
               [1., 1., 1., 1., 1., 0., 1., 0.],                                                                                                                                                                                    
               [1., 1., 1., 1., 1., 1., 1., 0.]],                                                                                                                                                                                                                                                                                                                                                                                                       
               [[1., 1., 1., 1., 1., 0., 1., 0.],                                                                                                                                                                                    
               [1., 1., 1., 1., 0., 1., 1., 1.],                                                                                                                                                                                    
               [1., 1., 1., 1., 1., 1., 0., 0.]],                                                                                                                                                                                                                                                                                                                                                                                                       
               [[0., 0., 0., 0., 1., 0., 0., 1.],                                                                                                                                                                                    
               [0., 0., 0., 0., 1., 0., 1., 0.],                                                                                                                                                                                    
               [0., 0., 0., 0., 0., 1., 0., 1.]]]], device='cuda:0',                                                                                                                                                             
               grad_fn=<RemainderBackward0>) 

Я нашел полезное репо, в котором есть функция, которая преобразует int8 в двоичный, как указано выше https://github.com/KarenUllrich/pytorch-binary-converter.git

0 голосов
/ 11 июля 2020

Измените тип dtype с torch.int8 на torch.uint8.

...