반응형
반응형

오늘은 파이토치(PyYorch)에서 가장 기본으로 사용되는 텐서(Tensor)에 대해서 알아보겠습니다.

텐서(Tensor)는 배열 및 행렬과 매우 유사한 특수 데이터 구조입니다

행렬을 배열처럼 사용할 수 있어서 복잡한 행렬 계산을 빠르게 진행할 수 있습니다.

텐서(Tensor)는 GPU또는 기타 하드웨어 가속기에서 실행할 수 있는 점을 제외하고는 NumPy의 ndarray와 유사합니다.

또한 텐서(Tensor)는 자동 미분에 최적화되어 있습니다.

먼저 텐서(Tensor)에 초기화에 대해서 알아보겠습니다.

def tensorEx1():
    data = [[1,2],[3,4]]
    x_data = torch.tensor(data)

    x_ones = torch.ones_like(x_data)
    print(f"Ones Tensor: \n{x_ones} \n")
    x_rand = torch.rand_like(x_data, dtype=torch.float)
    print(f"Random Tensor: \n {x_rand} \n")

간단한 코드를 사용해서 텐서(Tensor)를 초기화 할 수 있습니다.

결과 값은 초기화된 정보가 행렬로 저장되어 있습니다.

텐서(Tensor)는 명시적으로 재정의하지 않는 한 인수 텐서의 속성을 그대로 유지합니다.

텐서(Tensor)는 rand, ones, zeros를 사용해서 명시적으로 초기화가 가능합니다.

def tensorEx2():
    shape = (4,5,)
    rand_tensor = torch.rand(shape)
    ones_tensor = torch.ones(shape)
    zeros_tensor = torch.zeros(shape)

    print(f"Random Tensor: \n {rand_tensor} \n")
    print(f"Ones Tensor: \n {ones_tensor} \n")
    print(f"Zeros Tensor: \n {zeros_tensor} \n")

    print(f"Shape of Tensor : { rand_tensor.shape}")
    print(f"Datatype of Tensor : { rand_tensor.dtype}")
    print(f"Device Tensor is stored on : { rand_tensor.device}")

shape는 텐서(Tensor) 차원의 듀플입니다.

rand를 사용하면 랜덤 한 설정으로 초기화됩니다.

ones는 모두 1로 초기화되며, zeros는 모두 0으로 초기화됩니다.

텐서(Tensor)는 속성 메서드를 사용해서 정보를 확인할 수 있습니다.

shape, dtype, device 속성 정보 확인이 가능합니다.

출력 결과 초기화된 정보 및 속성 정보를 확인할 수 있습니다.

텐서(Tensor)는 산술, 선형대수, 행렬 조작, 샘플링 등을 포함한 100개 이상의 연산이 가능합니다.

모든 연산 정보는 아래 사이트를 확인해주세요.

https://pytorch.org/docs/stable/torch.html

 

torch — PyTorch 1.9.0 documentation

Shortcuts

pytorch.org

텐서(Tensor) 연산은 GPU에서 실행이 가능하여 일반적인 CPU 보다 빠른 속도 연산이 가능합니다.

기본은 CPU에서 연산이 진행되며 .to 메서드를 사용해서 GPU로 이동이 가능합니다.

간단하게 행렬에 접근하는 방법을 알아보겠습니다.

def tensorEx3():
    tensor = torch.ones(5,5)
    print('\n')
    print(tensor)
    print('First row: ', tensor[0])
    print('First column: ', tensor[:0])
    print('Last column:', tensor[...,-1])
    tensor[:,1] = 4
    print(tensor)

텐서(Tensor) 행렬에 원하는 위치 정보를 출력할 수 있거나 행에 포함된 모든 정보를 한 번에 변경이 가능합니다.

또한 처음, 마지막 접근이 가능합니다.

출력 결과 두 번째 위치 컬럼을 4로 초기화했습니다.

행렬이면서 배열과 동일하게 사용할 수 있어 정말 편리합니다.

 

텐서(Tensor)는 간단하게 행렬을 합할 수 있습니다.

 tensor = torch.ones(5,5)
 t1 = torch.cat([tensor, tensor, tensor], dim=1)
 print(f"\n{t1}\n")

cat 메서드를 사용하면 3개의 텐서(Tensor)를 합할 수 있습니다.

출력 결과 15개의 행렬을 확인할 수 있습니다.

 

텐서(Tensor)는 다양한 산술 연산이 가능합니다.

tensor1 = tensor + tensor
    print(f"\n{tensor1} \n")

    y1 = tensor @ tensor.T
    y2 = tensor.matmul(tensor.T)
    y3 = torch.rand_like(tensor)
    torch.matmul(tensor, tensor.T, out=y3)
    print(f"\n {y3} \n")

    z1 = tensor * tensor
    z2 = tensor.mul(tensor)
    z3 = torch.rand_like(tensor)
    torch.mul(tensor, tensor, out=z3)
    print(f"\n {z3} \n")

    agg = tensor.sum()
    agg_item = agg.item()
    print(agg_item, type(agg_item))

산순 연산을 사용해서 텐서(Tensor)를 다양고 쉽게 사용할 수 있습니다.

 

텐서(Tensor)는 copy를 사용해서 복사가 가능합니다.

복사를 하지 않을 경우는 동일한 객체로 인식되어 수정 시 모든 객체에 수정이 반영됩니다.

    copy = torch.ones(5,5)
    tensor.copy_(copy)
    tensor.add_(7)
    print(f"\n{copy} \n")
    print(f"\n{tensor} \n")

복사를 하게되면 복사된 정보는 새로운 객체로 인식되어 별도 수정이 가능합니다.

출력 결과 복사된 정보를 변경하면 이전 정보에 반영되지 않습니다.

 

텐서(Tensor)는 NumPy 배열로 변경이 가능합니다.

def tensorEx5():
    t = torch.ones(7)
    print(f"\n t : {t} \n")
    n = t.numpy()
    print(f"\n n: {n} \n")

    t.add_(2)
    print(f"\n t : {t} \n")
    print(f"\n n: {n} \n")

텐서(Tensor)에 변경된 내용이 NumPy 배열에 반영되는 것을 확인할 수 있습니다.

반대로 NumPy 배열을 텐서(Tensor)로 이동이 가능합니다.

def tensorEx6():
    n = np.ones(8)
    t = torch.from_numpy(n)
    np.add(n,1, out=n)
    print(f"\n t : {t} \n")
    print(f"\n n: {n} \n")

출력 결과 NumPy배열의 변경 내용이 텐서(Tensor)에 반영되었습니다.

텐서(Tensor)는 팁 러닝에 기본이 되는 배열 및 행렬과 매우 유사한 특수 데이터 구조로 빠른 계산 및 가독성이 매우 좋습니다.

일반적인 언어에서 어렵게 계산해야 하는 행렬을 단 몇 줄 코드로 계산이 가능합니다.

또한 GPU를 사용할 수 있어 복잡한 계산을 더욱더 빠르게 연산할 수 있습니다.

파이토치(PyTouch)를 사용하기 위해서는 기본 객체이기 때문에 반드시 사용법을 확인해주세요.

감사합니다.

https://pytorch.org/tutorials/beginner/blitz/tensor_tutorial.html#sphx-glr-beginner-blitz-tensor-tutorial-py

 

Tensors — PyTorch Tutorials 1.9.0+cu102 documentation

Note Click here to download the full example code Tensors Tensors are a specialized data structure that are very similar to arrays and matrices. In PyTorch, we use tensors to encode the inputs and outputs of a model, as well as the model’s parameters. Te

pytorch.org

https://believecom.tistory.com/736?category=1197289 

 

[python] 파이썬 파이 토치 PyTorch 설치하기

파이토치(PyTouch)는 토치(Torch) 및 카페2(Caffe2)를 기반으로 한 텐서 플로우와 유사한 딥러닝 라이브러리입니다. 다양한 인공지능이 연구되면서 빠른 속도를 자랑하는 파이토치(PyTouch)사용 비중이

believecom.tistory.com

 

반응형

+ Recent posts