행렬 (Matrix) : 직사각형 모양의 숫자의 배열
-> 다량의 데이터를 한번에 표현할 수 있는 좋은 수단
-> 텐서(tensor), 선형 계(linear system)의 표현, 미분 방정식의 풀이 등등에서 활발하게 쓰인다.
행렬의 차원(Dimension) : 행(row, 가로) x 열(column, 세로) -> 2차원 행렬일때 [ [ , ] [ , ] ....]
벡터(Vector) : M x 1차원의 행렬(Matrix)
-> 즉, 하나의 열을 가지며 여러 개의 행만을 가지기 때문에 벡터 내부 데이터의 수가 곧 벡터의 차원(Dimension)이 된다.
행렬의 덧셈(Matrix Addition) : 같은 위치에 있는 숫자끼리 더해주는 것
-> 같은 m x n 차원의 행렬끼리만 덧셈이 가능하다
행렬에 단순한 스칼라(상수) 값을 곱하는 경우 : 행렬의 각 숫자마다 해당 스칼라 값을 곱해주는 것
-> +, /, x 등 여러 가지의 연산이 섞여 있는 경우 : 사칙 연산의 규칙과 동일하게 곱하기와 나눗셈을 먼저 진행하고, 나머지 합과 차 연산을 진행하면 된다.
행렬과 벡터의 곱 : M x N 차원의 행렬 A와 N 차원 벡터를 곱하면 M 차원의 벡터가 도출된다.
-> 주의할 점 : 행렬의 열(n1)과 벡터의 행(m2)의 크기가 같아야 곱 연산이 가능 ( n1 = m2 )
-> 행렬의 결과 값은 m1 x n2 의 크기가 나온다.
행렬과 행렬의 곱
행렬의 특성
1. 행렬과 행렬의 곱에서는 교환 법칙이 성립하지 않는다.
-> 다만 Scalar x Matrix에서는 교환 법칙이 성립
2. Matrix x Matrix 에서 결합 법칙은 성립한다.
3. 연립 방정식을 행렬로 표현해 계산이 가능하다.
단위 행렬(Identity Matrix) : 왼쪽 위에서 오른쪽 아래 대각선 방향의 성분이 1이고, 다른 성분은 모두 0인 n 차 정사각 행렬
-> n차 단위 행렬이라하고 'I'로 기호화한다.
역행렬(Inverse Matrix) :
전치 행렬(Matirx Transpose) : 열과 행을 바꾼 행렬 / M x N -> N x M
-> Matrix 곱 연산에서 두개의 행렬의 크기를 맞추는데 사용
행렬로 연립방정식을 표현해 줄 수있지만 왜 굳이 복잡해 보이기만 하는 행렬로 연립방정식을 표현해줘야 하는 이유는?
-> 컴퓨터를 이용해 연립 방정식을 풀 수 있게 하려고 하는 것
<딥러닝 할때 헷갈리는 자료형들 비교>
텐서 : 다차원 배열을 표현하는 자료구조 -> (행, 열)
-> 기본 float 타입
numpy에서의 행렬 -> (행, 열)
-> 기본 int 타입
openCV에서 이미지 표현 -> (열 ,행 )
-> 기본 int 타입
-> 이미지에서 (0,0)은 왼쪽 상단을 의미한다.
딥러닝에서 행과 열이 의미하는 바
- 다중 선형 회귀 행렬 연산
- 샘플(Sample)과 특성(Feature)
-> 종속 변수 y를 예측하기 위한 독립 변수 x를 특성이라 부른다.
- 가중치 행렬 결과에 행이 추가 되는 경우
- 데이터 샘플의 개수가 늘어남을 의미
- 가중치 행렬 결과에 열이 추가되는 경우
- 노드의 개수가 늘어남을 의미
1. 데이터 구조란?
데이터 구조는 메모리에서 데이터가 어떻게 저장되어 있는지를 의미
- OpenCV와 NumPy 모두 이미지 = (H, W, C) 구조로 저장된다.
-> 즉, 이미지 자체는 (높이, 너비, 채널) 순서로 저장 - 예를 들어, (3, 4, 3) 크기의 이미지가 있다면:
- 높이 (H) = 3
- 너비 (W) = 4
- 채널 (C) = 3
[
[[R, G, B], [R, G, B], [R, G, B], [R, G, B]], # 1번째 행 (y=0)
[[R, G, B], [R, G, B], [R, G, B], [R, G, B]], # 2번째 행 (y=1)
[[R, G, B], [R, G, B], [R, G, B], [R, G, B]] # 3번째 행 (y=2)
]
즉, OpenCV와 NumPy 모두 데이터 자체는 (H, W, C) 순서로 저장된다.
-> PyTorch의 데이터는 (C, H, W) 순서로 저장된다.
2. 좌표 해석 방식이란?
좌표 해석 방식은 저장된 데이터를 어떻게 읽을 것인지를 결정하는 기준
-> 좌표 해석은 (3,3) 처럼 단일 좌표를 뜻하고,
-> 데이터 구조란 해당 좌표들의 묶음을 뜻한다
🔹 OpenCV의 좌표 해석 (영상 좌표계)
- OpenCV는 영상(이미지) 좌표계를 사용
- OpenCV에서 img[(col,세로)y, (row, 가로)x]
- 하지만 데이터는 (H, W, C) 구조로 저장됨.
🔹 NumPy의 좌표 해석 (행렬 좌표계)
- NumPy는 행렬(수학적 행렬) 좌표계를 사용
- (row, column) = (행, 열) = (가로, 세로)
- 즉, NumPy에서 img[row, col]
- 그리고 NumPy도 데이터를 (H, W, C) 구조로 저장함.
🔹 PyTorch의 좌표 해석 (행렬 좌표계)
- PyTorch는 행렬(수학적 행렬) 좌표계를 사용
- (row, column) = (행, 열) = (가로, 세로)
- 즉, PyTorch에서 img[row, col]
- 그리고 PyTorch는 데이터를 (C, H, W) 구조로 저장함.
3. 데이터 구조 vs. 좌표 해석 방식
OpenCV | (H(높이), W(너비), C(채널,BGR)) | (x, y) = (열, 행) |
NumPy | (H, W, C(RGB)) | (r, c) = (행, 열) |
PyTorch | (C(RGB), H, W) | (채널, 행, 열) |
✅ OpenCV와 NumPy는 (H, W, C) 구조지만, PyTorch는 (C, H, W) 구조
✅ 좌표 해석 방식은 OpenCV는 (열, 행), NumPy는 (행, 열), PyTorch는 (채널, 행, 열)
4. 라이브러리 간 변환할때 주의해야 할점
NumPy → PyTorch | permute(2, 0, 1) → (H, W, C) → (C, H, W), float() / 255.0 필요 |
PyTorch → NumPy | permute(1, 2, 0) → (C, H, W) → (H, W, C), byte() * 255 필요 |
OpenCV → PyTorch | cv2.COLOR_BGR2RGB, permute(2, 0, 1), float() / 255.0 |
PyTorch → OpenCV | permute(1, 2, 0), cv2.COLOR_RGB2BGR, byte() * 255 |
'AI 정리' 카테고리의 다른 글
딥러닝 아키텍처(Architecture) (0) | 2025.03.24 |
---|---|
Pytorch (0) | 2025.03.24 |
Validation (0) | 2025.03.23 |
딥러닝 기본적인 모델 유형 (0) | 2025.03.22 |
Overfitting+ Internal Covariate Shift와 해결 방법 (0) | 2025.03.19 |