Tensor 연산

shape가 맞아도 의도한 연산이 아닐 수 있습니다. 축·행렬곱·Broadcasting을 출력의 의미와 연결합니다.

실습 전에

01 cat과 stack은 shape를 어떻게 바꿀까요?

설명

cat은 기존 축을 이어 붙이고 stack은 새 축을 만듭니다.

02 행렬곱과 원소별 곱은 어느 shape에서 가능할까요?

설명

행렬곱은 안쪽 차원이 같아야 하며, 원소별 곱은 같은 shape 또는 Broadcasting 규칙을 따릅니다.

실습

실습용 노트북 미리보기실습용 노트북 다운로드

1. Batch와 특징의 축

시작 조건

첫 코드 셀의 X를 사용합니다. 행은 표본, 열은 특징입니다.

진행 방법

  1. X의 Shape·dtype와 X[1], X[:,2]의 의미를 기록하세요.
  2. torch.cat([X,X], dim=0)과 torch.cat([X,X], dim=1), torch.stack([X,X], dim=0)과 torch.stack([X,X], dim=1)의 Shape를 먼저 예상하세요.
  3. 네 연산을 각각 실행하세요. 두 선택과 네 연산을 여섯 행에 적고, 예상 Shape·실제 Shape·축의 의미를 기록하세요. 새 축이 생기는 연산을 구분하세요.

남길 결과

기록 항목과 확인할 점
연산
예상 shape
실제 shape
축의 의미

확인할 점

  • cat과 stack을 단순히 같은 연결이라고 쓰지 않았는가?
  • 값과 shape를 함께 확인했는가?

2. 원소곱과 행렬곱

시작 조건

앞 활동과 같은 X에서 X*X, X.T@X, X@X.T를 계산합니다.

진행 방법

  1. 코드를 실행하기 전에 세 연산의 예상 Shape를 기록하세요. 실행한 뒤 ‘연산식·예상 Shape·실제 Shape’ 세 열로 대조하세요.
  2. X.T@X의 (0,1) 원소를 손으로 계산하세요. 손계산 값과 실행 결과의 해당 원소를 나란히 적고 일치 여부를 기록하세요.
  3. Y=X+1로 두고 X*Y, X.T@Y를 각각 계산해 결과 배열을 출력하세요. 두 행에 연산식과 실제 Shape를 기록해 두 곱을 구분하세요.

남길 결과

기록 항목과 확인할 점
연산
결과 shape
선택 원소의 직접 계산
실제 값

확인할 점

  • 행렬곱과 원소곱의 연산 규칙을 구분했는가?
  • Transpose 후의 축 의미를 설명했는가?

3. reshape와 Broadcast 오류 찾기

시작 조건

원소 수 12를 (2,6),(4,3),(2,2,3)으로 바꾸고, 벡터 [1,2,3,4]를 X에 더합니다.

진행 방법

  1. 지정한 세 shape로 X를 reshape하고 numel()과 flatten() 결과를 원래 X와 대조하세요. 원소 수와 순서가 유지되는지 기록하세요.
  2. X의 shape (3,4)(3,4)를 유지하고 [1,2,3,4]와 [1,2,3]을 각각 더하세요. 성공한 출력 shape와 실패한 호출의 오류 메시지를 기록하세요.
  3. 행마다 각각 1·2·3을 더하려면 세 원소를 어느 shape로 만들어야 하는지 먼저 적고, 그 shape로 바꾸어 덧셈을 실행하세요. 수정한 입력 shape와 결과 배열을 남기세요.

남길 결과

기록 항목과 확인할 점
조작
입력 shape
출력·오류
수정한 shape

확인할 점

  • 오류를 try/except로 기록해 뒤 셀까지 실행되게 했는가?
  • 단순히 실행되는 shape와 원하는 축 의미가 같은지 확인했는가?