Tensor Shape와 연산
본인 사본을 만들어 실행·수정·기록하세요.
- 이름: ⟦여기에 직접 입력⟧
- 학번: ⟦여기에 직접 입력⟧
- Code Cell 실행: ▶ 또는
Shift+Enter, 위에서부터 순서대로. - Text Cell 작성: 더블클릭 →
직접 입력작성 →Shift+Enter. - 직접 작성 셀: 본인 코드 입력.
- 값 변경 후: 해당 셀과 뒤의 관련 셀 다시 실행.
1. Tensor 만들기
축과 dtype을 출력하고 예측과 비교합니다.
A. 기준 예제 · 먼저 읽고 실행
import sys, numpy as np, matplotlib.pyplot as plt
import torch
from torch import nn
import torch.nn.functional as F
torch.manual_seed(42)
torch.set_num_threads(2)
print('Python:', sys.version.split()[0], '| PyTorch:', torch.__version__)
x=torch.arange(12,dtype=torch.float32).reshape(4,3)
print(x,'\nshape:',x.shape,'dtype:',x.dtype)
print('features mean:',x.mean(dim=0));print('samples mean:',x.mean(dim=1))
B. 직접 수행
- 0~5의 1D Tensor, 0~11의 (4,3) Tensor, 0~23의 (2,3,4) Tensor를 float로 생성하세요.
- (4,3)을 표본 4개·특징 3개로 보고 특징별 평균과 표본별 평균의 예상 shape를 적은 뒤
dim=0·1로 검증하세요.
두 축에서 Mean을 각각 계산한 뒤, 예상 Shape와 실제 결과의 Shape를 두 열로 기록하고 일치 여부를 적으세요.
예상은 정확한 수치 대신 shape나 증가·감소 방향으로 적어도 됩니다. 코드는 위 예제를 참고해 작성하고, 설명만 묻는 항목은 아래 Text Cell에 답하세요.
# ✍ 직접 작성: 이 셀 아래에 본인의 코드를 추가하세요.
# 코드가 길어지면 Code Cell을 추가해도 됩니다.
C. 직접 기록 · 이 Text Cell을 더블클릭해서 수정
- 확인하거나 바꾼 조건: ⟦직접 입력⟧
- 실행 전 예상: ⟦직접 입력⟧
- 실제 출력/그래프에서 확인한 값: ⟦직접 입력⟧
- 예상과 차이 및 설명: ⟦직접 입력⟧
2. cat·stack·reshape
같은 입력에 다른 결합 방법을 적용합니다.
A. 기준 예제 · 먼저 읽고 실행
a=torch.arange(6).reshape(2,3);b=a+10
print('cat0:',torch.cat([a,b],0).shape)
print('cat1:',torch.cat([a,b],1).shape)
print('stack:',torch.stack([a,b],0).shape)
print('reshape:',x.reshape(2,2,3).shape)
print('unsqueeze:',x.unsqueeze(0).shape)
print('restore:',x.unsqueeze(0).squeeze(0).shape)
B. 직접 수행
- 연결 예제의
a,b를 사용해torch.cat([a,b],dim=0)과dim=1을 각각 실행하세요.torch.stack([a,b],dim=0)과dim=1도 실행하세요. - 연산·dim·출력 shape를 네 행으로 적고, 원래 축이 길어지는 경우와 새 축이 생기는 경우를 구분하세요.
- 원소 수가 12인
x를 세 가지 shape로 바꾸고 입력·출력 shape와 원소 수를 기록하세요. 예를 들어 , , 을 사용할 수 있습니다. 이 중 한 shape의 축 하나를-1로 바꾸어 실행하고, 자동으로 계산된 축 크기를 적으세요.
예상은 정확한 수치 대신 shape나 증가·감소 방향으로 적어도 됩니다. 코드는 위 예제를 참고해 작성하고, 설명만 묻는 항목은 아래 Text Cell에 답하세요.
# ✍ 직접 작성: 이 셀 아래에 본인의 코드를 추가하세요.
# 코드가 길어지면 Code Cell을 추가해도 됩니다.
C. 직접 기록 · 이 Text Cell을 더블클릭해서 수정
- 확인하거나 바꾼 조건: ⟦직접 입력⟧
- 실행 전 예상: ⟦직접 입력⟧
- 실제 출력/그래프에서 확인한 값: ⟦직접 입력⟧
- 예상과 차이 및 설명: ⟦직접 입력⟧
3. 축과 연산 오류 찾기
A의 열 수와 B의 행 수가 같아야 A@B를 계산할 수 있습니다. 먼저 두 배열의 shape를 출력해 곱셈이 가능한지 확인합니다.
A. 기준 예제 · 먼저 읽고 실행
A=torch.arange(6,dtype=torch.float32).reshape(2,3)
B=torch.arange(12,dtype=torch.float32).reshape(3,4)
print((A@B).shape)
print((A+torch.tensor([10,20,30])).shape)
assert (A@B).shape==(2,4)
B. 직접 수행
- A.shape=(2,3), B.shape=(3,4)인 기준 예에서 A*B와 A@B 중 실행 가능한 연산과 그 이유를 쓰세요.
- A+
torch.tensor([10,20])가 실패하는 이유를 설명하고, 행별로 10과 20을 더하도록 Tensor shape를 수정하세요. - 실패 코드는 Markdown에만 남기고 수정한 Code Cell을 실행하세요.
예상은 정확한 수치 대신 shape나 증가·감소 방향으로 적어도 됩니다. 코드는 위 예제를 참고해 작성하고, 설명만 묻는 항목은 아래 Text Cell에 답하세요.
# ✍ 직접 작성: 이 셀 아래에 본인의 코드를 추가하세요.
# 코드가 길어지면 Code Cell을 추가해도 됩니다.
C. 직접 기록 · 이 Text Cell을 더블클릭해서 수정
- 확인하거나 바꾼 조건: ⟦직접 입력⟧
- 실행 전 예상: ⟦직접 입력⟧
- 실제 출력/그래프에서 확인한 값: ⟦직접 입력⟧
- 예상과 차이 및 설명: ⟦직접 입력⟧
반복 숙달 · 실행 전에 판단하기
앞의 직접 수행에서 비교한 조건 세 가지를 이 표에 정리하세요. 이미 수행한 실험을 다시 추가할 필요는 없습니다. 비교가 부족하면 한 조건만 바꾸어 보충하세요.
| 변경 조건 | 예상 shape/수치/결과 | 실제 결과 | 오류가 있었다면 원인 |
|---|---|---|---|
| ⟦직접 입력 1⟧ | ⟦직접 입력⟧ | ⟦직접 입력⟧ | ⟦직접 입력⟧ |
| ⟦직접 입력 2⟧ | ⟦직접 입력⟧ | ⟦직접 입력⟧ | ⟦직접 입력⟧ |
| ⟦직접 입력 3⟧ | ⟦직접 입력⟧ | ⟦직접 입력⟧ | ⟦직접 입력⟧ |
# ✍ 반복 실험 코드
선택 실습 · 오류의 원인을 찾아 코드 고치기
이어 붙일 축 이외의 크기가 다른 경우
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))Text Cell에 두 입력 shape와 실행 성공 여부를 표로 적으세요. 행을 이어 붙이는
dim=0에서 같아야 하는 축의 번호와 크기를 적고, 성공한 결과의 행·열 수를 설명하세요.
저장 전 확인
- 작성란과 출력·그래프를 확인하고 새 런타임에서 전체 셀을 순서대로 실행하세요.
- 본인 Drive에 저장한 뒤
.ipynb로 내려받으세요.
코드, 실제 Output·그래프, 직접 작성한 해석을 포함하세요. 제출은 KLAS를 이용하며 기한은 학기 일정과 최신 공지를 확인합니다.
파일명: 이름_학번_5주차.ipynb.