일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- React
- 기초 수학
- NCP
- Backbone.js
- mariadb
- SQL
- nodejs
- For
- Babel
- Machine Learning
- Switch
- python
- rabbitmq
- phpredis
- 블레이드 템플릿
- laravel
- fastapi
- webpack
- AWS
- javascript
- deep learning
- Node
- linux
- Redis
- nginx
- docker
- CentOS
- Redux
- Go
- php
- Today
- Total
개발일기
기초수학 - 텐서의 전치와 내적 본문
전치
0차원 스칼라가 전치하면 행벡터가 열벡터로, 열벡터가 행벡터로 바뀐다.
1차원 벡터가 전치하면 스칼라과 동일하게 행벡터가 열벡터로, 열벡터가 행벡터로 바뀐다.
2차원 행렬부터는 다르게 동작한다.
$ A = \begin{pmatrix}
x_{11} & x_{12} & x_{13} \\
x_{21} & x_{22} & x_{23} \\
x_{31} & x_{32} & x_{33} \\
\end{pmatrix}
A^T = \begin{pmatrix}
x_{11} & x_{21} & x_{31} \\
x_{12} & x_{22} & x_{32} \\
x_{13} & x_{23} & x_{33} \\
\end{pmatrix} $
행렬의 시작점과 끝점을 중심으로 대각선을 그린 후, 대각선을 중심으로 축을 뒤집으면 전치 행렬이 나타난다. 쉽게 보면 행이 열로 바뀌고 열이 행으로 바뀌는것이 전치이다.
Numpy 전치
import numpy as np
X = np.array([ [1, 2, 3],
[4, 5, 6],
[7, 8, 9]]) # 3행 3열의 행렬 생성
print("X: \\n", X)
print("Transpose X: \\n", X.T)
"""
X:
[[1 2 3]
[4 5 6]
[7 8 9]]
Transpose X:
[[1 4 7]
[2 5 8]
[3 6 9]]
"""
numpy에서 행렬 변수 뒤에 T를 붙이면 전치 행렬이 나타난다.
Pytorch 전치
import torch
X = torch.tensor([ [1, 2, 3],
[4, 5, 6],
[7, 8, 9]]) # 3행 3열의 행렬 생성
print("X: \\n", X)
print("Transpose X: \\n", X.T)
"""
X:
tensor([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
Transpose X:
tensor([[1, 4, 7],
[2, 5, 8],
[3, 6, 9]])
"""
Pytorch도 numpy와 동일하게 행렬 변수 뒤에 T를 붙이면 전치 행렬이 나타난다.
Tensorflow 전치
# Tensorflow Transpose
import tensorflow as tf
X = tf.Variable([ [1, 2, 3],
[4, 5, 6],
[7, 8, 9]]) # 3행 3열의 행렬 생성
print("X: \\n", X)
print("Transpose X: \\n", tf.transpose(X))
"""
X:
<tf.Variable 'Variable:0' shape=(3, 3) dtype=int32, numpy=
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]], dtype=int32)>
Transpose X:
tf.Tensor(
[[1 4 7]
[2 5 8]
[3 6 9]], shape=(3, 3), dtype=int32)
"""
Tensorflow는 transpose() 메서드의 매개변수에 행렬 변수를 추가해야 전치 행렬이 나타난다.
내적
내적은 두 벡터에서 행렬에 상응하는 요소끼리 곱하고 총합으로 출력된 스칼라 값을 의미한다. 요소끼리 곱을 하기에 두 벡터의 크기는 같아야 한다.
$ x = (2, -5, 3) $
$ y = (4, 2, 6) $
$ 2*4 + (-5)2 + 36 = 8 + (-10) + 18 = 16 $
표기법: $ x\cdot y, x^Ty, <x, y> $
x와 y벡터의 각 요소들을 곱한값을 총합한 스칼라값이 내적값이다. 내적을 표시하는 방법은 3가지가 있다.
Numpy 내적
# 내적
import numpy as np
a = np.array([2, -5, 3])
b = np.array([4, 2, 6])
print("Inner Product: ", np.dot(a, b)) # 16
numpy에서는 두 벡터를 dot()메서드에 넣어주면 내적값을 계산할 수 있다.
Pytorch 내적
import torch
a = torch.tensor([2, -5, 3])
b = torch.tensor([4, 2, 6])
print("Inner Product: ", torch.dot(a, b)) # 16
pytorch는 numpy와 동일하게 dot()메서드에 두 벡터를 넣어주면 내적값이 출력된다.
Tensorflow 내적
# Inner Product Tensorflow
import tensorflow as tf
a = tf.Variable([2, -5, 3])
b = tf.Variable([4, 2, 6])
print(tf.reduce_sum(tf.multiply(a, b))) # <tf.Tensor: shape=(), dtype=int32, numpy=16>
multiply(): 각각의 행렬 요소를 곱해주는 함수다. 2는 4, -5는 2, 3은 6과 곱한다.
reduce_sum(): 총합을 계산하는 함수다. 결과값인 8, -10, 18은 더한다.
tensorflow는 pytorch와 numpy와는 다르게 multiply(), reduce_sum()을 사용하는 2가지의 다소 번거로운 과정을 거쳐야 내적을 구할 수 있다.
'Deep Learning, Machine Learning > 기초 수학' 카테고리의 다른 글
기초 수학 - 고유값의 특성 (0) | 2024.03.31 |
---|---|
기초 수학 - 행렬 판별식 (0) | 2024.03.31 |
기초 수학 - 고유 벡터와 고유값 (0) | 2024.03.31 |
기초 수학 - 행렬 (0) | 2024.03.27 |
기초 수학 - 선형대수학 Tensor, Vector, Norm (0) | 2024.03.23 |