1. 벡터와 행렬과 텐서
2. 텐서(Tensor)
인공 신경망: 복잡한 모델 내의 연산을 주로 행렬 연산을 통해 해결
텐서의 크기(shape): 각 축을 따라서 얼마나 많은 차원이 있는지를 나타낸 값
d = np.array(5)
# ndim을 출력했을 때 나오는 값을 축(axis)의 개수 또는 텐서의 차원이라고 부름
print('텐서의 차원 :',d.ndim)
print('텐서의 크기(shape) :',d.shape)
텐서의 차원 : 0
텐서의 크기(shape) : ()
d = np.array([1, 2, 3, 4])
print('텐서의 차원 :',d.ndim)
print('텐서의 크기(shape) :',d.shape)
텐서의 차원 : 1
# 벡터의 차원: 하나의 축에 놓인 원소의 개수
텐서의 크기(shape) : (4,)
# 3행 4열의 행렬
d = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
print('텐서의 차원 :',d.ndim)
print('텐서의 크기(shape) :',d.shape)
텐서의 차원 : 2
텐서의 크기(shape) : (3, 4)
d = np.array([
[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [10, 11, 12, 13, 14]],
[[15, 16, 17, 18, 19], [19, 20, 21, 22, 23], [23, 24, 25, 26, 27]]
])
print('텐서의 차원 :',d.ndim)
print('텐서의 크기(shape) :',d.shape)
텐서의 차원 : 3
텐서의 크기(shape) : (2, 3, 5)
자연어 처리에서 자주 사용 (시퀀스 데이터(ex. 문장, 뉴스 등)를 표현할 때 자주 사용)
ㄴ 3D 텐서: samples, timesteps, word_dim, batch_size
[[[1, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0]],
[[1, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0]],
[[0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 1, 0], [0, 0, 0, 0, 0, 1]]]
: (3, 3, 6)의 크기를 가지는 3D 텐서
훈련 데이터를 다수 묶어 입력으로 사용하는 것 -> 딥 러닝에서 배치(Batch)라고 함
3. 벡터와 행렬의 연산
같은 크기의 두 개의 벡터나 행렬 -> 덧셈, 뺄셈 가능
같은 위치의 원소끼리 연산: 요소별(element-wise) 연산
A = np.array([1, 2, 3])
B = np.array([4, 5, 6])
print('두 벡터의 내적 :',np.dot(A, B))
두 벡터의 내적 : 32
A = np.array([[1, 3],[2, 4]])
B = np.array([[5, 7],[6, 8]])
print('두 행렬의 행렬곱 :')
print(np.matmul(A, B))
두 행렬의 행렬곱 :
[[23 31]
[34 46]]
4. 다중 선형 회귀 행렬 연산으로 이해하기
입력 행렬 X는 5행 4열, 출력 벡터 Y는 5행 1열 -> 가중치 벡터 W의 크기는 4행 1열을 가져야 함
5. 샘플(Sample)과 특성(Feature)
6. 가중치와 편향 행렬의 크기 결정