[IBM course #4] Introduction to Neural Networks and PyTorch
Overview of Tensors
신경망은 수학적 함수이며, 입력 → 처리 → 출력 구조로 구성.
PyTorch의 모든 구성 요소는 텐서로 표현된다.
즉,
입력 x → 텐서
출력 y → 텐서
신경망의 가중치 (파라미터) → 텐서
PyTorch 텐서는 쉽게 NumPy 배열로 변환 가능
PyTorch는 GPU 연산을 손쉽게 지원
파라미터에 대해 requires_grad=True로 설정 시, 자동 미분이 가능
→ 이를 통해 모델 학습이 가능해짐
Tensors 1D
0차원 텐서 → 숫자
1차원 텐서 → 숫자의 배열 (DB의 row, vector, time series)
tensor types
실수 → float tensor / double tensor
정수 → int tensor / byte tensor
tensor 생성 방법
torch.tensor([7,4,3]) 형태로 생성 가능
tensor attributes
속성 / 메서드 | 설명 | 예시 |
dtype | 텐서 내부 데이터의 타입 확인 | tensor.dtype → torch.float32, torch.int32, torch.uint8 등 |
type() | 텐서의 타입 문자열 반환 | tensor.type() → 'torch.FloatTensor' 등 |
ndimension() | 텐서의 차원 수 반환 (Rank) | tensor.ndimension() → 1 (1D 텐서일 경우) |
size() | 텐서의 요소 개수 반환 | tensor.size() → 5 (예: 5개의 값 포함) |
item() | 스칼라 값을 추출 (1-element 텐서에서) | tensor[0].item() → 값 자체 (예: 3.0) |
tensor type casting
방법 | 설명 | 예시 |
생성 시 dtype 지정 | 명시적으로 텐서 타입 지정 | torch.tensor(data, dtype=torch.float32) |
.type() 이용 | 기존 텐서를 다른 타입으로 변환 | tensor.type(torch.FloatTensor) |
.FloatTensor() 사용 | 특정 타입의 텐서 생성 | torch.FloatTensor([1.0, 2.0]) |
tensor 차원 변환& reshape
메서드 | 설명 | 예시 |
view(rows, cols) | 텐서의 shape 변환 | tensor.view(5, 1) |
view(-1, 1) | 행 수 자동 추론 (총 요소 수 기준) | tensor.view(-1, 1) → 요소 수에 따라 행 자동 계산됨 |
unsqueeze(dim) | 차원 추가 | tensor.unsqueeze(1) |
squeeze() | 크기 1인 차원 제거 | tensor.squeeze() |
NumPy/ Pandas 호환 관련
메서드 / 함수 | 설명 |
torch.from_numpy(numpy_array) | numpy array → torch tensor |
tensor.numpy() | torch tensor → numpy array |
tensor.tolist() | torch tensor → Python list |
pandas_series.values → torch.from_numpy() | Pandas Series → Tensor |
Indexing & Slicing
리스트처럼 [i:j]로 슬라이싱
인덱스로 특정 값 수정도 가능
연산 관련
연산 | 예시 | 설명 |
+, *, / | tensor + scalar | 브로드캐스팅 적용 |
torch.dot(u, v) | 벡터 간 내적 | |
tensor.mean() | 평균값 계산 | |
tensor.max() | 최댓값 반환 | |
torch.sin(tensor) | 사인 함수 적용 (원소별) |
참고
Hadamard Product : C=A⊙B. 위치별 곱셈. 벡터 또는 텐서가 결과로 나옴
Dot Product : u⋅v=∥u∥∥v∥cos(θ). 곱한 후 합. 스칼라(숫자 하나)가 결과로 나옴 → 두 벡터가 얼마나 유사한지 나타내는 숫자. dot product가 크다 → 각도가 작다 → 방향이 비슷하다 → 유사도가 높다
수학 함수 및 시각화
항목 | 설명 | 예시 |
torch.linspace(start, end, steps) | 일정 간격의 텐서 생성 | torch.linspace(0, 2*math.pi, 100) |
torch.sin(tensor) | 사인값 계산 | y = torch.sin(x) |
matplotlib.pyplot.plot(x.numpy(), y.numpy()) | 텐서 → NumPy 변환 후 시각화 | |
matplotlib inline | Jupyter에서 그래프 표시 설정 |
Two-Dimensional Tensors
행렬 형태의 데이터, 이미지 데이터 표현
각 행은 샘플, 열은 특성
텐서 생성
중첩 리스트로 생성 가능
.ndimension(), .shape, .size(), .numel()로 정보 확인
Indexing & Slicing

tensor[i][j], tensor[i, j]로 값 접근
행/열 단위로 슬라이싱 가능
기본 연산
덧셈 : 동일한 위치 요소끼리 덧셈 (행렬 덧셈과 동일)
스칼라 곱 : 모든 요소에 곱 적용
Hadamard 곱 : 동일 위치 요소끼리 곱
행렬 곱 (Matrix Multiplication) : .mm() 사용 → 행렬 곱의 규칙 (A 열 = B 행) 만족해야 함
Differentiation in PyTorch
기본 미분 개념
PyTorch에서의 미분
- x = torch.tensor(2.0, requires_grad=True)
- y = x ** 2
- y.backward()
- x.grad → 결과: 4
PyTorch 내부 작동 원리
PyTorch는 미분을 자동으로 계산하기 위해 backward graph (역전파 그래프)라는 걸 만듬. (텐서(Tensor)와 함수(Function)를 노드(Node)로 갖는 그래프)
속성 이름 | 설명 |
data | 실제 값이 저장된 곳 |
grad | 계산된 미분(기울기) 값이 저장되는 곳 |
grad_fn | 이 텐서를 만든 연산(함수)을 가리키는 노드 |
requires_grad | 이 텐서에 대해 미분을 계산할지 여부 (True면 계산함) |
is_leaf | 이 텐서가 그래프의 "입력값(시작점)"인지 여부 (직접 만든 텐서면 True) |
편도함수(Partial Derivatives)
u에 대한 편미분
v에 대한 편미분
이를 pytorch에서는 아래와 같이 계산
import torch
u = torch.tensor(1.0, requires_grad=True)
v = torch.tensor(2.0, requires_grad=True)
f = u * v + u ** 2 # f = uv + u^2 → 값은 1×2 + 1^2 = 3
f.backward()
print(u.grad) # df/du = v + 2u = 2 + 2×1 = 4
print(v.grad) # df/dv = u = 1
'🥇 certification logbook' 카테고리의 다른 글
[Coursera/IBM course #5] Softmax (0) | 2025.07.13 |
---|---|
[Coursera/IBM course #4] Linear Regression Prediction (0) | 2025.06.14 |
[Coursera/IBM course #4] Dataset (0) | 2025.06.07 |
[Coursera/IBM course #3] 강화학습(Reinforcement Learning) (2) | 2025.06.04 |
[Coursera/IBM course #3] Advanced Keras Techniques (2) | 2025.06.01 |
[Coursera/IBM course #3] Unsupervised Learning in Keras (2) | 2025.05.31 |
[Coursera/IBM course #3] Transformers in Keras (2) | 2025.05.28 |
[Coursera/IBM course #3] TensorFlow for Image Processing (1) | 2025.05.24 |