텐서 조작 -1

Sukhun-Net·2024년 6월 20일

벡터 = 1차원 텐서, 2차원 행렬 = 2차원 텐서. 그리고 3차원 텐서, 4차원 텐서, 5차원 텐서 등으로 통칭

컴퓨터가 한 번에 처리하는 2D 텐서의 크기는 (batch size × dim) = 64 × 256

*위의 그림에서 batch_size는 이미지의 장 수를 의미

Code (기본)

Numpy로 텐서 만들기

[숫자, 숫자, 숫자]와 같은 형식으로 만들고 이를 np.array()로 감싸주면 된다.

t = np.array([0., 1., 2., 3., 4., 5., 6.])

파이토치로 1차원 텐서인 벡터를 만들기

t = torch.FloatTensor([0., 1., 2., 3., 4., 5., 6.])

브로드캐스팅(Broadcasting)

행렬의 덧셈과 뺄셈: 두 행렬 A, B의 크기가 같아야 한다

행렬의 곱셈: A의 마지막 차원과 B의 첫번째 차원이 일치해야한다.

딥러닝을 하게되면 불가피하게 크기가 다른 행렬 또는 텐서에 대해서 사칙 연산을 수행할 필요가 있는 경우가 생긴다. 이를 위해 파이토치에서는 자동으로 크기를 맞춰서 연산을 수행하게 만드는 브로드캐스팅이라는 기능을 제공한다.

// Vector + scalar
m1 = torch.FloatTensor([[1, 2]])
m2 = torch.FloatTensor([3]) # [3] -> [[3, 3]]
print(m1 + m2)


출력 : tensor([[4., 5.]])

Tip : 텐서의 크기(shape)를 표현할 때는 ,(컴마)를 쓰기도 하고 ×(곱하기)를 쓰기도 합니다. 예를 들어 2행 3열의 2D 텐서를 표현할 때 (2, 3)라고 하기도 하고 (2 × 3)이라고 하기도 합니다. (5, )의 형식은 (1 × 5)를 의미합니다.

브로드캐스팅 규칙 및 과정

규칙

  1. 오른쪽에서 왼쪽으로 차원을 비교합니다.
    ex) m1이 (1,2)이면 m1의 차원은 2 -> 1

  2. 두 차원이 같거나, 둘 중 하나가 1이면 브로드캐스팅이 가능합니다.

  3. 한 차원이 1이면 해당 차원을 다른 텐서의 크기로 확장합니다.

과정 (위의 m1의 크기: (1, 2) , m2의 크기: (2, 1) 를 예로 함)

  1. m1의 크기는 (1, 2)이고, m2의 크기는 (2, 1)입니다.

  2. 오른쪽에서 첫 번째 차원 (즉, 두 번째 차원)을 비교하면 m1의 크기는 2이고, m2의 크기는 1입니다. 여기서 m2의 크기 1이 2로 확장됩니다.

  3. 왼쪽에서 첫 번째 차원을 비교하면 m1의 크기는 1이고, m2의 크기는 2입니다. 여기서 m1의 크기 1이 2로 확장됩니다.

  4. 브로드캐스팅을 통해 텐서의 크기는 다음과 같이 됩니다:

    m1: (2, 2)로 확장됩니다.

    m2: (2, 2)로 확장됩니다.

  5. 구체적으로 브로드캐스팅 된 텐서들은 다음과 같습니다

profile
Data Scientist (Computer Vision, Multimodal)

0개의 댓글