Tensor Shape와 연산

본인 사본을 만들어 실행·수정·기록하세요.

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. 직접 수행

  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를 두 열로 기록하고 일치 여부를 적으세요.

예상은 정확한 수치 대신 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. 직접 수행

  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로 바꾸어 실행하고, 자동으로 계산된 축 크기를 적으세요.

예상은 정확한 수치 대신 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. 직접 수행

  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을 실행하세요.

예상은 정확한 수치 대신 shape나 증가·감소 방향으로 적어도 됩니다. 코드는 위 예제를 참고해 작성하고, 설명만 묻는 항목은 아래 Text Cell에 답하세요.

# ✍ 직접 작성: 이 셀 아래에 본인의 코드를 추가하세요.
# 코드가 길어지면 Code Cell을 추가해도 됩니다.

C. 직접 기록 · 이 Text Cell을 더블클릭해서 수정

반복 숙달 · 실행 전에 판단하기

앞의 직접 수행에서 비교한 조건 세 가지를 이 표에 정리하세요. 이미 수행한 실험을 다시 추가할 필요는 없습니다. 비교가 부족하면 한 조건만 바꾸어 보충하세요.

변경 조건 예상 shape/수치/결과 실제 결과 오류가 있었다면 원인
⟦직접 입력 1⟧ ⟦직접 입력⟧ ⟦직접 입력⟧ ⟦직접 입력⟧
⟦직접 입력 2⟧ ⟦직접 입력⟧ ⟦직접 입력⟧ ⟦직접 입력⟧
⟦직접 입력 3⟧ ⟦직접 입력⟧ ⟦직접 입력⟧ ⟦직접 입력⟧
# ✍ 반복 실험 코드

선택 실습 · 오류의 원인을 찾아 코드 고치기

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

  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에서 같아야 하는 축의 번호와 크기를 적고, 성공한 결과의 행·열 수를 설명하세요.

저장 전 확인

  1. 작성란과 출력·그래프를 확인하고 새 런타임에서 전체 셀을 순서대로 실행하세요.
  2. 본인 Drive에 저장한 뒤 .ipynb로 내려받으세요.

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

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