728x90
반응형
벡터와 행렬
- 신경망에서는 벡터와 행렬(또는 텐서)이 도처에서 등장한다.
벡터(vector)
- 크기와 방향을 가진 양
- 숫자가 일렬로 늘어선 집합으로 표현 가능
- 파이썬에서느 1차원 배열로 취급
행렬(matrix)
- 숫자가 2차원 형태(사각형 형상)로 늘어선 것
벡터와 행렬의 예
- 벡터는 1차원 배열, 행렬은 2차원 배열로 표현 가능
- 행렬에서 가로줄을 행(row), 세로줄을 열(column)이라 한다. - 3행 2열
- 벡터와 행렬을 확장해 숫자 집합을 N차원으로 표현한 것도 생각할 수 있다. 이를 일반적으로 텐서라고 한다.
- 벡터는 표현하는 방법이 두 가지
- 숫자를 세로로 나열하는 방법(열벡터)
- 숫자를 가로로 나열하는 방법(행벡터)
열벡터와 행벡터
import numpy as np
x = np.array([1,2,3])
print("x의 클래스 : ",x.__class__) # 클래스 이름 표시
print("x.shape : ", x.shape)
print("x.ndim : ", x.ndim)
W = np.array([[1,2,3], [4,5,6]])
print("W.shape : ",W.shape)
print("W.ndim : ", W.ndim)
- np.ndarry클래스에는 다양한 편의 메서드와 인스턴스 변수가 준비되어 있다.
- 인스턴스 변수 중 shape와 ndim이용
- shape은 다차원 배열의 형상을
- x는 1차원 배열 원소 수가 3개, w는 2차원 배열 2x3(2행 3열) 행렬
- ndim은 차원 수를 담고 있다.
브로드캐스트
- 넘파이의 다차원 배열에서는 형상이 다른 배열끼리도 연산할 수 있다.
A = np.array([[1,2],[3,4]])
A * 10
- 2*2 행렬에 10이라는 스칼라 값을 곱했다.
A = np.array([[1,2],[3,4]])
B = np.array([10,20])
A*B
벡터의 내적과 행렬의 곱
- 벡터의 내적으로 수식은 아래와 같다.
- 2개의 벡터 x = (x1,x2,x3...xn)과 y = (y1,y2,y3...yn)이 있다고 가정
- 벡터의 내적은 두 벡터에서 대응하는 원소들의 곱을 모두 더한 것이다.
행렬의 곱셈 방법
# 행렬의 내적
a = np.array([1,2,3])
b = np.array([4,5,6])
print("np.dot(a,b) : ", np.dot(a,b))
# 행렬의 곱
A = np.array([[1,2], [3,4]])
B = np.array([[5,6],[7,8]])
print("np.matmul(A,B) : ", np.matmul(A,B))
- 벡터의 내적과 행렬의 곱 모두에 np.dot()사용은 가능하다.
- np.dot(x,y)의 인수가 모두 1차원 배열이면 벡터의 내적을 계산하고, 2차원 배열이면 행렬의 곱을 계산한다.
- 다만 둘을 구분해 코드의 논리와 의도 명확히
행렬 형상 확인
- 행렬, 벡터 사용시 '형상(shape)'에 주의해야 한다.
형상 확인 : 행렬의 곱에서는 대응하는 차원의 원소 수를 일치시킨다.
- 행렬 C의 형상은 A의 행 수와 B의 열 수가 된다.
출처 : 밑바닥부터 시작하는 딥러닝2
https://www.hanbit.co.kr/store/books/look.php?p_code=B8950212853
728x90
반응형
최근댓글