Pytorch Basic Tensor Manipulation

Uomnf97·2021년 4월 5일
0

딥러닝의 기본 계산단위

  • 딥러닝은 기본적으로 vector, Matrix, Tensor 을 가지고 계산을 하게 된다. 엄밀이 설명하면 설명하면 벡터는 1차원 행렬, Matrix는 이차원 행렬, Tensor는 3차원 행렬을 의미한다. 하지만 벡터, 행렬은 텐서의 한 종류로 같은 연산을 따른다.

  • tensor 연산에서 나오는 dim 변수는 해당 차원의 사이즈를 의미하는 것이므로 명심할것!


Tensor

기본적인 tensor 연산

  • Tensor 선언
    FloatTensor 선언 : float 형 변수를 가지고 있는 tensor을 선언한다.
    t = torch.FloatTensor([0., 1., 2., 3.])
    ByteTensor 선언: Bool 변수를 가지고 있는 tensor을 선언한다.
    lt = torch.ByteTensor([True, False, True])
    *출력하면 0,1의 값으로 나온다. 나중에 이를 통해 이진변수로 만들어 활용할 수 있다.
    LongTensor 선언: Long 변수를 가지고 있는 tensor을 선언한다.
    lt = torch.LongTensor([[0], [1], [2], [0]])

  • Tensor 모양 확인
    tensor_name.dim(): tensor가 몇차원인지 확인
    tensor_name.size(): tensor의 사이즈 확인 -> 몇 행 몇열인지 알려줌

  • Tensor 기본 연산(BroadCasting)
    같은 크기 일때 : 단순히 더하기 연산을 통해 각 요소를 더해줄 수 있음.
    다른 크기 일때 : 각 요소를 크기에 맞게 확장시켜준뒤 더해줌

    다만 2X1 혹은 1X2과 같은 행렬 처럼 같은 방식으로 행 또는 열을 복제할 수 있는 경우만 가능하며 위의 함수처럼 2X2, 3X1행렬 처럼 복제를 통해서 같은 모형을 만들 수 없는 경우 size에러가 발생한다.

  • Tensor Multiplication
    Tensor_name.mul(Tensor_name2): Tensor_name과 Tensor_name2의 각요소끼리만 곱해준다.
    Tensor_name.matmul(Tensor_name2): Tensor_name과 Tensor_name2를 행렬 곱의 연산을 해준다.

  • Mean
    Tensor_name.mean() : 모든 요소의 평균값을 제공한다.(단, 연산결과 float값이 나오는 경우는 FloatTensor선언된 Tensor만 계산 가능하다.)
    .mean(dim=num) : num에 해당하는 차원의 사이즈를 1로 만들어주고 그 값에 그 차원의 평균값을 넣어준다.

  • Sum
    tensorl.name() : 모든 요소의 합을 출력하여 준다.
    .sum(dim=num) : num에 해당하는 차원의 사이즈를 1로 만들어주고 그 값에 그 차원의 합계를 넣어준다.

  • dim = -1
    보통 마지막 행을 의미하는데, 조건을 나타내는 경우, 남은 해당 조건이외의 차원을 의미한다. 그리고 0, 1, ...을 넣을 수 있고 차원의 번호를 의미한다. 따라서 tensor연산에 이 문구를 넣을 경우 그 연산의 범위를 제한 해줄 수 있다.

  • Max and Argmax
    Tensorname.max() : Tensor의 최댓값을 가져온다.
    Tensorname.argmax() : Tensor의 최댓값의 위치를 가져온다.

  • View
    tensor[].shape : [ ]안에 들어가는 차원의 원소의 갯수와 tensor의 원소의 갯수가 같으면 []안에 주어진대로 변형을 해준다.
    tensor.squeeze() : 사이즈가 1인 차원을 제거해준다.

  • Concatenate
    torch.cat : 두개의 텐서를 합쳐준다.
    torch.stack : 두개의 텐서를 합쳦준다.

  • mul
    mul : 스칼라 량을 곱해주기만한다..
    _mul : 스칼라 량을 곱한뛰 저장해준다.

profile
사회적 가치를 실현하는 프로그래머

0개의 댓글