강의자료 · 전기공학머신러닝실습

Tensor 연산

학습 목표

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

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·축의 의미를 기록하세요. 새 축이 생기는 연산을 구분하세요.

남길 결과

import torch
X=torch.arange(12,dtype=torch.float32).reshape(3,4)
print(X,X.shape,torch.cat([X,X],dim=0).shape)
# TODO: 나머지 연결 연산의 예상·실제를 기록하세요.

결과 기록·자가 점검

연산:

예상 shape:

실제 shape:

축의 의미:

확인할 점

원소곱과 행렬곱

시작 조건

앞 활동과 같은 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를 기록해 두 곱을 구분하세요.

남길 결과

print(X*X,X.T@X,X@X.T)
Y=X+1
# TODO: 선택 원소와 Y를 사용한 두 연산을 비교하세요.

결과 기록·자가 점검

연산:

결과 shape:

선택 원소의 직접 계산:

실제 값:

확인할 점

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와 결과 배열을 남기세요.

남길 결과

for shape in [(2,6),(4,3),(2,2,3)]:print(shape,X.reshape(shape).shape)
# TODO: Broadcast 성공·오류·의도한 수정 사례를 기록하세요.

결과 기록·자가 점검

조작:

입력 shape:

출력·오류:

수정한 shape:

확인할 점