5주차 · Tensor Shape와 연산

실습 전에

01 값과 자리의 의미

예시 상황 학생별 측정값을 행과 열로 정리하듯이, 사진의 숫자들은 무엇을 기준으로 구분해야 할까요?

설명
  • 학생별 표는 학생과 측정 항목을 구분합니다. 사진은 픽셀의 세로·가로 위치와 색 성분을 구분해야 합니다.
  • Tensor는 이렇게 여러 축으로 수치를 배치한 배열입니다. 값이 놓인 자리가 무엇을 뜻하는지 함께 정해야 합니다.

관련 개념 복습 ↗

02 사진 한 장에서 여러 장으로

예시 상황 컬러 사진 여러 장을 묶으면, 사진 한 장을 표현할 때보다 무엇을 더 구분해야 할까요?

설명
  • 사진 번호를 구분할 축이 필요합니다. 예를 들어 사진 수·색 성분 수·높이·너비의 순서로 배치할 수 있습니다.
  • Tensor의 축 개수는 실제 공간의 차원이 아니라 데이터에서 구분하는 항목과 관련됩니다. 축 순서는 사용하는 모델에서 확인합니다.

03 연산의 의미

학생별 평균과 측정 항목별 평균은 각각 어떤 값들을 모아 계산하나요?

설명
  • 학생별 평균은 한 학생의 항목들을, 항목별 평균은 여러 학생의 같은 항목을 모아 계산합니다.
  • 이번 실습은 축 번호를 바꿨을 때 어떤 정보가 남는지 확인하는 과정입니다. 같은 원리가 사진 묶음과 AI 모델의 데이터 처리에도 적용됩니다. PyTorch Tensor에서는 이 배열 계산을 GPU 연산과 자동미분으로 이어갈 수 있습니다.

실습

1. Tensor 만들기

  1. 0~5의 1D Tensor, 0~11의 (4,3) Tensor, 0~23의 (2,3,4) Tensor를 float로 생성하세요.
  2. (4,3)을 표본 4개·특징 3개로 보고 특징별 평균과 표본별 평균의 예상 shape를 적은 뒤 dim=0·1로 검증하세요.

두 축에서 Mean을 각각 계산한 뒤, 예상 Shape와 실제 결과의 Shape를 두 열로 기록하고 일치 여부를 적으세요.

2. cat·stack·reshape

  1. 연결 예제의 a,b를 사용해 torch.cat([a,b],dim=0)과 dim=1을 각각 실행하세요. torch.stack([a,b],dim=0)과 dim=1도 실행하세요.
  2. 연산·dim·출력 shape를 네 행으로 적고, 원래 축이 길어지는 경우와 새 축이 생기는 경우를 구분하세요.
  3. 원소 수가 12인 x를 세 가지 shape로 바꾸고 입력·출력 shape와 원소 수를 기록하세요. 예를 들어 (2,6)(2,6), (3,4)(3,4), (2,2,3)(2,2,3)을 사용할 수 있습니다. 이 중 한 shape의 축 하나를 -1로 바꾸어 실행하고, 자동으로 계산된 축 크기를 적으세요.

3. 축과 연산 오류 찾기

  1. A.shape=(2,3), B.shape=(3,4)인 기준 예에서 A*B와 A@B 중 실행 가능한 연산과 그 이유를 쓰세요.
  2. A+torch.tensor([10,20])가 실패하는 이유를 설명하고, 행별로 10과 20을 더하도록 Tensor shape를 수정하세요.
  3. 실패 코드는 Markdown에만 남기고 수정한 Code Cell을 실행하세요.

제출·저장

코드, 실제 Output·그래프, 직접 작성한 해석을 포함하세요. 제출은 KLAS를 이용하며 기한은 학기 일정과 최신 공지를 확인합니다.

파일명: 이름_학번_5주차.ipynb.

실행 환경을 다시 시작하고 전체 코드를 위에서부터 실행한 뒤 저장하세요.

선택 실습

이어 붙일 축 이외의 크기가 다른 경우

  1. a와 b를 만드는 예제를 실행한 뒤, 노트북 맨 아래에 Code Cell을 추가하고 다음 코드를 실행하세요.
    for debug_second in [b[:, :2], b]:
        print("first:", a.shape, "second:", debug_second.shape)
        try:
            print("cat(dim=0):", torch.cat([a, debug_second], dim=0).shape)
        except (RuntimeError, ValueError) as error:
            print(type(error).__name__, str(error))
  2. Text Cell에 두 입력 shape와 실행 성공 여부를 표로 적으세요. 행을 이어 붙이는 dim=0에서 같아야 하는 축의 번호와 크기를 적고, 성공한 결과의 행·열 수를 설명하세요.