텐서 연산, 비교 개념 정리
텐서 연산 및 비교 개념 정리
텐서 연결 (Tensor Concatenation)
- 
    텐서 연결: - torch.cat함수를 사용하여 텐서를 지정된 차원(axis) 방향으로 연결합니다.
- 예시:
        a = torch.tensor([[1, 2], [3, 4]]) b = torch.tensor([[5, 6], [7, 8]]) result = torch.cat((a, b), dim=0) # 출력: # tensor([[1, 2], # [3, 4], # [5, 6], # [7, 8]])
 
- 
    오류와 해결 방법: - 동일한 두 텐서를 서로 다른 차원으로 연결하려고 할 때, 차원이 일치하지 않으면 오류가 발생합니다.
- 예시:
        a = torch.tensor([[1, 2], [3, 4]]) b = torch.tensor([[5, 6]]) # 오류 발생: RuntimeError: Sizes of tensors must match except in dimension 1. Got 2 and 1 in dimension 0 b = torch.tensor([[5], [6]]) result = torch.cat((a, b), dim=1) # 출력: # tensor([[1, 2, 5], # [3, 4, 6]])
 
텐서 확장 (Tensor Expansion)
- 
    텐서 확장: - torch.expand메소드를 사용하여 텐서를 지정된 크기로 확장합니다. 주의할 점은 확장된 텐서는 원본 데이터를 공유합니다.
- 예시:
        f = torch.tensor([[1, 2, 3]]) f_expanded = f.expand(4, 3) # 출력: # tensor([[1, 2, 3], # [1, 2, 3], # [1, 2, 3], # [1, 2, 3]])
 
- 
    반복: - torch.repeat메소드를 사용하여 텐서를 지정된 횟수만큼 반복합니다.
- 예시:
        h = torch.tensor([[1, 2], [3, 4]]) h_repeated = h.repeat(2, 3) # 출력: # tensor([[1, 2, 1, 2, 1, 2], # [3, 4, 3, 4, 3, 4], # [1, 2, 1, 2, 1, 2], # [3, 4, 3, 4, 3, 4]])
 
텐서 산술 연산 (Tensor Arithmetic Operations)
- 
    요소별 연산: - torch.add,- torch.sub,- torch.mul,- torch.div등의 함수를 사용하여 요소별 연산을 수행할 수 있습니다.
- 예시:
        A = torch.tensor([[1, 2], [3, 4]]) B = torch.tensor([[5, 6], [7, 8]]) result = torch.add(A, B) # 출력: # tensor([[ 6, 8], # [10, 12]])
 
- 
    인플레이스 연산: - 인플레이스 계산은 기존 텐서의 메모리를 재사용하여 계산 결과를 직접 저장하는 방법입니다.
- 
        A.add_(B)와 같은 인플레이스 연산을 사용하면 텐서A의 값이 변경되며,A와B의 요소별 덧셈 결과가A에 저장됩니다.
- 예시:
        A = torch.tensor([[1, 2], [3, 4]]) B = torch.tensor([[5, 6], [7, 8]]) A.add_(B) print(A) # 출력: # tensor([[ 6, 8], # [10, 12]])
 
- 
    브로드캐스팅: - 크기가 다른 텐서들 간의 연산 시 자동으로 작은 텐서를 큰 텐서의 크기로 확장하여 연산합니다.
- 예시:
        C = torch.tensor([[1, 2], [3, 4]]) D = torch.tensor([5, 6]) result = C + D # 출력: # tensor([[ 6, 8], # [ 8, 10]]) # 설명: 1차원 텐서 D가 자동으로 확장되어 2차원 텐서 C와 연산됩니다.
 
텐서 비교 연산 (Tensor Comparison Operations)
- 
    요소 비교: - PyTorch에서 제공하는 비교 연산 함수들은 두 텐서의 요소들을 비교하고, 그 결과를 동일한 크기의 텐서로 반환합니다. 각 함수는 다음과 같은 역할을 합니다:
 
- 
    torch.eq(==): 두 텐서의 요소들이 같은지 비교합니다.result = torch.eq(v, w) # v와 w가 같은 위치에 있는 요소들이 같으면 True, 다르면 False를 반환
- 
    torch.ne(!=): 두 텐서의 요소들이 다른지 비교합니다.result = torch.ne(v, w) # v와 w가 같은 위치에 있는 요소들이 다르면 True, 같으면 False를 반환
- 
    torch.gt(>): 첫 번째 텐서의 요소가 두 번째 텐서의 요소보다 큰지 비교합니다.result = torch.gt(v, w) # v의 요소가 w의 요소보다 크면 True, 그렇지 않으면 False를 반환
- 
    torch.lt(<): 첫 번째 텐서의 요소가 두 번째 텐서의 요소보다 작은지 비교합니다.result = torch.lt(v, w) # v의 요소가 w의 요소보다 작으면 True, 그렇지 않으면 False를 반환
- 
    torch.ge(>=): 첫 번째 텐서의 요소가 두 번째 텐서의 요소보다 크거나 같은지 비교합니다.result = torch.ge(v, w) # v의 요소가 w의 요소보다 크거나 같으면 True, 그렇지 않으면 False를 반환
- 
    torch.le(<=): 첫 번째 텐서의 요소가 두 번째 텐서의 요소보다 작거나 같은지 비교합니다.result = torch.le(v, w) # v의 요소가 w의 요소보다 작거나 같으면 True, 그렇지 않으면 False를 반환
텐서 논리 연산 (Tensor Logical Operations)
- 논리 연산:
3. 논리 연산
- 
    PyTorch에서는 논리 연산을 수행하는 함수도 제공됩니다. 주요 논리 연산 함수는 다음과 같습니다: 
- 
    torch.logical_and: 두 텐서의 요소별 논리곱 (AND) 연산을 수행합니다.x = torch.tensor([True, False, True, False]) y = torch.tensor([True, True, False, False]) result = torch.logical_and(x, y) # 출력: tensor([True, False, False, False])
- 
    torch.logical_or: 두 텐서의 요소별 논리합 (OR) 연산을 수행합니다.result = torch.logical_or(x, y) # 출력: tensor([True, True, True, False])
- 
    torch.logical_xor: 두 텐서의 요소별 베타적 논리합 (XOR) 연산을 수행합니다.result = torch.logical_xor(x, y) # 출력: tensor([False, True, True, False])
이 외에도 PyTorch에서는 다음과 같은 논리 연산을 제공합니다:
- torch.logical_not: 텐서의 각 요소에 대해 논리 부정 (NOT) 연산을 수행합니다.- result = torch.logical_not(x) # 출력: tensor([False, True, False, True])
텐서의 복합 연산 (Complex Tensor Operations)
- 
    요소별 연산: - 두 텐서의 요소별로 여러 연산을 순차적으로 수행합니다.
- 예시:
        E = torch.tensor([[1, 2], [3, 4]]) F = torch.tensor([[5, 6], [7, 8]]) add_result = E + F sub_result = E - F mul_result = E * F div_result = E / F # 출력: # add_result: tensor([[ 6, 8], # [10, 12]]) # sub_result: tensor([[-4, -4], # [-4, -4]]) # mul_result: tensor([[ 5, 12], # [21, 32]]) # div_result: tensor([[0.2000, 0.3333], # [0.4286, 0.5000]])
 
- 
    제곱과 제곱근: - torch.pow,- torch.sqrt등의 함수를 사용하여 제곱 및 제곱근 연산을 수행합니다.
- 예시:
        G = torch.tensor([[1, 2], [3, 4]]) H = torch.tensor([[2, 2], [2, 2]]) pow_result = torch.pow(G, H) sqrt_result = torch.sqrt(G.float()) # 출력: # pow_result: tensor([[ 1, 4], # [ 9, 16]]) # sqrt_result: tensor([[1.0000, 1.4142], # [1.7321, 2.0000]])
 
참고) 행렬 생성
torch.twos_like명령어는 존재하지 않지만,torch.full_like를 사용하여 동일한 크기의 텐서를 원하는 값으로 채울 수 있습니다. 예시:
H = torch.tensor([[2, 2], [2, 2]])
# 동일한 크기의 행렬을 2로 채우기
H_like = torch.full_like(H, 2)
print(H_like)
# 출력:
# tensor([[2, 2],
#         [2, 2]])
텐서의 실제 문제 적용 (Real-world Tensor Applications)
- 
    3차원 텐서 연결: - 3차원 텐서를 연결할 때 크기를 맞추어야 합니다.
- 예시:
        M = torch.tensor([[[1, 2], [3, 4]], [[5, 6], [7, 8]]]) N = torch.tensor([[[9, 10]], [[11, 12]]]) N = N.expand(2, 2, 2) result = torch.cat((M, N), dim=1) # 출력: # tensor([[[ 1, 2], # [ 3, 4], # [ 9, 10]], # # [[ 5, 6], # [ 7, 8], # [11, 12]]])
 
- 
    인플레이스 연산: - 메모리를 절약하기 위해 인플레이스 연산을 사용
 
합니다.
- 예시:
    P = torch.tensor([[1, 2], [3, 4]]) Q = torch.tensor([[5, 6], [7, 8]]) P.add_(Q) # 출력: # tensor([[ 6, 8], # [10, 12]])
댓글남기기