Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 데이터분석
- 데이터리안월간웨비나
- ml 실전 프로젝트
- 회귀분석 프로젝트
- 데이터엔지니어링시작하기
- 데이터엔지니어
- 데이터분석가
- 머신러닝 회귀 모델
- 데이터엔지니어링
- ridge 회귀
- 학생 성적 예측
- 파이썬기초
- 파이썬
- Python
- 데이터엔지니어링배우기
- 누적조회수1만명
- 데이터리안웨비나
- 파이썬오류
- 판다스
- ai관련 직업
- 데이터사이언티스트
- kaggle 프로젝트
- 데이터리안
- 블로그성장일기
- 데이터직무
- 데이터 분석가
- python 데이터 분석
- 데이터 엔지니어
- 블로그성장글
- vader감정분석
Archives
- Today
- Total
데이터 분석가 Damla's blog
[기초] Scalar, Vector, Metrix, Tensor 개념과 차이점 본문
파이썬(Python)/ML & Deep Learning
[기초] Scalar, Vector, Metrix, Tensor 개념과 차이점
DA Damla 2025. 2. 2. 20:23딥러닝은 결국 "텐서 간의 연산의 값을 비교하는 과정"이라고 볼 수 있다. 그렇기 때문에 딥러닝의 스칼라 부터 텐서를 정리해보았다.
<목차>
1. 0 ~ 4차원을 나타내는 단어의 정의
2. numpy 혹은 Torch로 나타내는 만드는 방법
3. 궁금증 해소 : 3D 텐서를 선언해서 만들면 실제로 어떤 형태일까?
1. 0 ~ 4차원을 나타내는 단어의 정의
- 차원은 행렬의 구성이 한 개일때 부터 여러개이거나 여러개로 쌓여있는 형태를 말한다.
- Scalar(스칼라) : 0D : 숫자 하나를 나타내는 형태
- Vector(벡터) : 1D : 행은 여러개 열은 1개인 형태
- Matrix(메트릭스) : 2D : 행과 열 모두 1개 초과인 형태
- Tensor(텐서) : 3 ~ nd : 행과 열이 여러개인 것이 여러번 쌓여있는 형태
- 그림으로 이해하기
2. numpy 혹은 Torch 패키지로 스칼라 ~ 텐서를 만드는 법
- 넘파이와 파이토치의 토치를 사용해서 0~nD차원의 행렬을 생성할 수 있다.
- 생성하는 방법은 아래와 같다.
- 주의할점
- scalar는 numpy로만 생성이 가능하다.
- 각 행렬의 값의 type을 생성하면서 지정할 수 있다.
- 예시 : torch.FolatTensor(3,6,7, dtype = torch.float)
- numpy와 torch에서 행렬 생성에 사용하는 시퀀스는 거의 유사하다.
- 주의할점
import numpy as np
import torch
# Tensor 생성
## - 원본데이터를 tensor로 전환하는 것은 많이하나 보통 생성은 많이 하지 않을 것
### Scala(스칼라) 는 numpy로 만든다
### 파이토치가 텐서플로우보다 쉬운이유는 넘파이를 사용하기 때문임!
# scalar
data1 = np.array(10) # 10이라는 한개의 값을 가진 0D텐서
print(data1, data1.ndim, data1.shape) # ndim은 axis(rank) 축을 의미(number of array demension), shape는 행렬의 차원을 말함
# Vector
data2 = torch.FloatTensor([1,2]) # 1,2 원소를 가진 1D텐서 선언, 구성요소가 보통은 int를 주로 사용함 (정수(float) 보다는) 그외 double, long
print(data2, data2.ndim, data2.shape)
# Matrix (2D 텐서)
data3 = torch.FloatTensor(3,2) # 3 by 2의 원소를 가진 2D 선언, 구성하는 값은 랜덤하게 설정됨
print(data3, data3.ndim, data3.shape)
# Tensor (3D 텐서)
data4 = torch.FloatTensor([[1],[2],[3]]) # 1 by 1 by 1형태의 3D텐서 선언, 값을 1,2,3으로 지정하여 선언함
print(data4, data4.ndim, data4.shape)
# Tensor (3D 텐서)
data5 = torch.FloatTensor([1,2,3])
print(data5, data5.ndim, data5.shape,data5.size()) #size는 numpy에서는 size만 사용 torch에서는 size()괄호까지 같이 사용
# 텐서는 밖에서 안쪽으로 선언함
torch.zeros(3,2,5, dtype=torch.int) #행렬을 0들로 채우기
torch.ones(2,3) # 1로 채우기
torch.rand(4,5) # 랜덤하게 채우기
torch.full_like(data5,20) # data5와 같은 행렬 조건으로 채우되 20으로 값 채우기
각 행렬을 이루는 값의 성격을 dtype으로 지정할 수도 있음
3. 궁금증 해소 : 3D 텐서를 선언해서 만들면 실제로 어떤 형태일까?
import torch
# (3,2,7) 형태의 3D 텐서
tensor = torch.tensor([
[[1, 2, 3, 4, 5, 6, 7], [8, 9, 10, 11, 12, 13, 14]], # Depth 0
[[15, 16, 17, 18, 19, 20, 21], [22, 23, 24, 25, 26, 27, 28]], # Depth 1
[[29, 30, 31, 32, 33, 34, 35], [36, 37, 38, 39, 40, 41, 42]] # Depth 2
])
print(tensor.shape) # (3,2,7)
print(tensor)
- 만약, 위와 같은 코드를 사용해서 텐서를 만들었다면,
- 위에서 부터 순서대로 [Depth, rows, cols]의 형태를 가지게된다.
- 첫번째 값 (3) -> Depth (깊이, 채널 개수)
- 두번째 값 (2) -> Rows (행, 한 단면의 행의 갯수)
- 세번째 값 (7) -> columns (열, 한 단면의 열의 갯수)
- 즉, 위와 같이 만든 형태라면, 2 by 3 (2 바이 3), 2행과 7열로 이루어진 한 면이 3개의 높이로 쌓여있는 형태
- 위에서 부터 순서대로 바닥에서 위로 올라가는 형태로 숫자를 지정하여 생성한 것으로 이해할 수 있다.
- 첫번째 바닥 부분의 면
- [ 1 2 3 4 5 6 7 ]
- [ 8 9 10 11 12 13 14 ]
- 두번째 중간에 있는 면
- [ 15 16 17 18 19 20 21 ]
- [ 22 23 24 25 26 27 28 ]
- 세번째 가장 위에 위치한 면
- [ 29 30 31 32 33 34 35 ]
- [ 36 37 38 39 40 41 42 ]
- 첫번째 바닥 부분의 면
- 위에서 부터 순서대로 [Depth, rows, cols]의 형태를 가지게된다.
'파이썬(Python) > ML & Deep Learning' 카테고리의 다른 글
[Project] 머신러닝 회귀 모델 활용 학생 성적 예측 사례 : Kaggle 교육 데이터를 중심으로 (0) | 2025.04.12 |
---|---|
[Project] 텍스트 마이닝으로 본 고객 리뷰 분석 사례: Delivered Korea를 중심으로 (0) | 2025.04.12 |
[기초]머신러닝과 딥러닝 비교하기 (2) | 2025.02.16 |
[데이터 타입] 데이터 타입 뒤 숫자의 의미 (float16, int32) (0) | 2025.01.29 |