torch tensor 사용법

5656 단어 torch
1.x = torch.Tensor(5):zero()
Tensor 전환 int:
 
int(x1.cpu().data)

2.conf_mask = torch.ones(nB, nA, dim, dim)
conf_mask[...]=0
나눗셈 작업:
float((torch.sum(preds == labels.data)).cpu().data)/2

Tensor 구조의 세 가지 방식


다음 두 가지는 비교적 자주 사용한다.
--  4 
x = torch.Tensor(2,5):fill(3.14) 
--  4 
x = torch.Tensor(torch.LongStorage({4,4,3,2}))

주의: 두 번째 함수 호출 방식은 torch.Tensor(sizes, [strides])입니다.크기와 [strides]는 모두 LongStorage 유형입니다.그리고strides는 모든 차원에서 하나의 원소가 다음 원소 사이의 길이이다.그리고 마음대로 설정할 수 있어요!
x = torch.Tensor(torch.LongStorage({4}), torch.LongStorage({0})):zero() -- zeroes the tensor
x[1] = 1 -- all elements point to the same address!
> x
 1
  •  

  • 위에서 stride를 0으로 명령한 것을 볼 수 있다. 즉, x는 4개의 단원이 있지만 모두 실제 물리적 주소를 가리키는 같은 단원을 가리킨다!x[1]=1로 하여금 전체 x를 1로 만들었다.대단해.
    또 하나는 테이블을 통해 구성하는 것이다.
    > torch.Tensor({{1,2,3,4}, {5,6,7,8}})
     1  2  3  4
     5  6  7  8
    [torch.DoubleTensor of dimension 2x4]
  •  

  • 첨부: torch는 여러분의 사용을 편리하게 하기 위해 내부 내부의 대부분 함수를 두 가지 방법으로 호출할 수 있습니다. - src:function() 또는torch.function(src, …).두 번째 스타일의 호출은 자신을 첫 번째 매개 변수로 호출하는 것이다.그러나 내부가 아직 완선하지 않기 때문에 일부 함수는 첫 번째 방법이나 두 번째 방법만 사용할 수 있다.예컨대
    -- 
    x = torch.Tensor(2,3):fill(2)
    y = torch.fill(torch.Tensor(2,3),2)
    
    -- 
    local x = torch.transpose(vecInput, 2,3)  -- 
    local y = vecInput:transpose(2,3)  -- 

    이것들은 스스로 테스트할 수밖에 없다. 물론 대부분이 두 가지를 완벽하게 지지한다.그래서 걱정할 것도 없어요.

    Tensor 데이터 캡처


    x[index], 등가와select(1,index).만약 x가 2차원 데이터라면 x[2]는 두 번째 줄을 대표한다!바로 x:select(1,2)에 해당한다.1차원의 두 번째 를 선택합니다.
    narrow,select,sub 약!
    이 세 함수는 x[{dim1s,dim1e},{dim2s,dim2e},...}]로 대체할 수 있습니다!
    x = torch.Tensor(2,5,6):zero()
    
    --  , , ,
    --  " "
    --  " , , , "
    x[{1,3}] = 1
    th> x
    (1,.,.) =
      0  0  0  0  0  0
      0  0  0  0  0  0
      1  1  1  1  1  1
      0  0  0  0  0  0
      0  0  0  0  0  0
    
    (2,.,.) =
      0  0  0  0  0  0
      0  0  0  0  0  0
      0  0  0  0  0  0
      0  0  0  0  0  0
      0  0  0  0  0  0
    [torch.DoubleTensor of size 2x5x6]
    
    --  
    --   x[{1,3,2}], x[{ {1},{3},{2}]
  •  

  • x[{dim1s,dim1e},{dim2s,dim2e},.....}]의 용법약.

    Tensor의 좌표 값을 가져옵니다.

    x = torch.Tensor(2,3,4)
    
    v = x[{1,2,2}]  -- , Tensor , index x nDimension , ! `select` !!!!!!!!!!!!!!!!!!!!!!!!
    v_false = x[{{1},{2},{3}}] -- ! Tensor , num!
    
    x[v] = 2  --  x 2!!!!

    Tensor 할당


    다음은 단일 요소에 대한 값만 설명합니다.
    x = torch.Tensor(2,3,4)
    -- !
    x[{1,2,3}] = 2
    x[{{1},{2},{3}}] = 2  

    Tensor 검색


    이것은 함수 nonzero () 하나입니다.0이 아닌 요소의 좌표를 반환합니다.
    > x = torch.rand(4, 4):mul(3):floor():int()
    > x
     2  0  2  0
     0  0  1  2
     0  2  2  1
     2  1  2  2
    [torch.IntTensor of dimension 4x4]
    > torch.nonzero(x)
     1  1
     1  3
     2  3
     2  4
     3  2
     3  3
     3  4
     4  1
     4  2
     4  3
     4  4
    [torch.LongTensor of dimension 11x2]
  •  

  • Expanding/Replicating/Squeezing Tensors


    expand


    이 함수의 작용은singleton 차원에서 확장하는 것이다!놀랍게도 expand Tensor는 새로운 공간을 열 필요가 없고 확장된 그 차원의stride를 0으로 직접 만들 수 있는 기교를 사용했다.
    x = torch.rand(10,1)
    > x
     0.3837
     0.5966
     0.0763
     0.1896
     0.4958
     0.6841
     0.4038
     0.4068
     0.1502
     0.2239
    [torch.DoubleTensor of dimension 10x1]
    >x:stride()
    1
    1
    
    y = torch.expand(x,10,2)
    > y
     0.3837  0.3837
     0.5966  0.5966
     0.0763  0.0763
     0.1896  0.1896
     0.4958  0.4958
     0.6841  0.6841
     0.4038  0.4038
     0.4068  0.4068
     0.1502  0.1502
     0.2239  0.2239
    [torch.DoubleTensor of dimension 10x2]
    >y:stride()
    1
    0
  •  
  •  

  • 보시다시피 확장된 차원이 0이 되었습니다!!또한:
    th> x = torch.rand(5,1,4)
                                                                          [0.0001s]
    th> x:stride()
     4    -- 1*4
     4    -- 4
     1
    [torch.LongStorage of size 3]
    
    th> x = torch.rand(5,2,4)
                                                                          [0.0001s]
    th> x:stride()
     8    -- 2*4
     4    -- 4
     1
    [torch.LongStorage of size 3]

    구조 함수를 직접 호출하기 때문에stride를 지정하지 않으면 연속적입니다.
    
    th> x = torch.rand(10,1,5)
                                                                          [0.0001s]
    th> x:stride()
     5
     5
     1
    [torch.LongStorage of size 3]
    
    th> y = torch.expand(x,10,2,5)
                                                                          [0.0001s]
    th> y:stride()
     5
     0
     1
    [torch.LongStorage of size 3]

    repeatTensor


    이 함수는 새로운 신청 공간이 필요합니다!
    x = torch.rand(5)
    > x
     0.7160
     0.6514
     0.0704
     0.7856
     0.7452
    [torch.DoubleTensor of dimension 5]
    
    > torch.repeatTensor(x,3,2)
     0.7160  0.6514  0.0704  0.7856  0.7452  0.7160  0.6514  0.0704  0.7856  0.7452
     0.7160  0.6514  0.0704  0.7856  0.7452  0.7160  0.6514  0.0704  0.7856  0.7452
     0.7160  0.6514  0.0704  0.7856  0.7452  0.7160  0.6514  0.0704  0.7856  0.7452
    [torch.DoubleTensor of dimension 3x10]

    Squeeze


    이 함수는 모든singleton의 차원을 압축해서 제거하는 것이다.

    View - 스토리지 Storage 재검토


    여기에는 주로 5개의 함수가view,viewAs,transpose(), t(),permute()이다.이것들은 모두 Tensor에 대해 다른 시각으로 보는 것이다!따라서 원래의 저장 공간을 직접 변경합니다!  These methods are very fast, because they do not involve any memory copy.
    x = torch.zeros(4)
    > x:view(2,2)
     0 0
     0 0
    [torch.DoubleTensor of dimension 2x2]
    
    > x:view(2,-1)
     0 0
     0 0
    [torch.DoubleTensor of dimension 2x2]
    
    --  view “1” 
    x = x:view(2,1,2)
    th> x
    (1,.,.) =
      0  0
    
    (2,.,.) =
      0  0
    [torch.DoubleTensor of size 2x1x2]
    
    th> x:stride()
     2
     2
     1
    [torch.LongStorage of size 3]

    좋은 웹페이지 즐겨찾기