본문 바로가기
Naver Clould with BitCamp/Aartificial Intelligence

Scalar, Vector, Matirx, Tensor

by HJ0216 2023. 1. 20.

기본 환경: IDE: VS code, Language: Python

 

  • 스칼라(Scalar): 행렬을 이루는 각 요소(개체), 0차원(점)
  • 벡터(Vector): scalar의 모임, 1차원(선)
  • 행렬(Metrix): vector의 모임, 2차원(면)
  • 텐서(Tensor): metrix의 모임, 3차원(공간), 4차원(시공간) 등 3차원 이상의 다차원 공간

 

Data Shape

# data_shape.py

import numpy as np

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense


# 1. data
a = np.array([1, 2, 3])
b = np.array([[1], [2], [3]])
c = np.array([[1, 2, 3]])
d = np.array([[1, 2],
              [3, 4],
              [5, 6]])
e = np.array([[1, 2, 3, 4],
             [11, 22, 33, 44],
             [111, 222, 333, 444]])
f = np.array([[[1, 2, 3],[4, 5, 6]],
              [[11, 22, 33],[44, 55, 66]],
              [[111, 222, 333],[444, 555, 666]]])
g = np.array([[[1, 2], [3, 4], [5, 6]],
             [[11, 22], [33, 44], [55, 66]]])
h = np.array([[[[1], [2], [3]],[[4], [5], [6]]],
              [[[11], [22], [33]],[[44], [55], [66]]]])
i = np.array([[[[1, 2], [3, 4], [5, 6], [7, 8]],
              [[11, 22], [33, 44], [55, 66], [77, 88]]],
              [[[1, 2], [3, 4], [5, 6], [7, 8]],
              [[11, 22], [33, 44], [55, 66], [77, 88]]]])
j = np.array([[[[1,2]]]])
# z = np.array([[1,2,3][4,5]]) # TypeError

print("a.shape: ", a.shape) # Vector: (3, )
print("b.shape: ", b.shape) # Metrix: (3, 1)
print("c.shape: ", c.shape) # Metirx: (1, 3)
print("d.shape: ", d.shape) # Metrix: (3, 2)
print("e.shape: ", e.shape) # Metrix: (3, 4)
print("f.shape: ", f.shape) # Tensor: (3, 2, 3)
print("g.shape: ", g.shape) # Tensor: (2, 3, 2)
print("h.shape: ", h.shape) # Tensor: (2, 2, 3, 1)
print("i.shape: ", i.shape) # Tensor: (2, 2, 4, 2)
print("j.shape: ", j.shape) # Tensor: (1, 1, 1, 2)
# print("z.shape: ", z.shape)



'''
# Result

a.shape:  (3,)
b.shape:  (3, 1)
c.shape:  (1, 3)
d.shape:  (3, 2)
e.shape:  (3, 4)
f.shape:  (3, 2, 3)
g.shape:  (2, 3, 2)
h.shape:  (2, 2, 3, 1)
i.shape:  (2, 2, 4, 2)
j.shape:  (1, 1, 1, 2)

'''

'''
x = [1. 2. 3]
x.shape #(3, ) = (Scalar, ): 스칼라 3개 → 벡터 1개 (출력이 ,로 끝남)

x = [[1], [2], [3]]
x.shape #(3, 1) = (Vector, Scalar): 벡터 3개, 스칼라 1개 → 행렬 1개

x = [[1,2,3]]
x.shape #(1, 3) = (Vector, Scalar): 벡터 1개, 스칼라 3개 → 행렬 1개

x = [[1,2][3,4]]
x.shape #(2, 2) = (Vector, Scalar): 벡터 1개, 스칼라 3개 → 행렬 1개

x = [[[1,2,3]]]
x.shape #(1, 1, 3) = (Metrix, Vector, Scalar): 행렬 1개, 벡터 1개, 스칼라 3개 → 텐서 1개

x = [[1,2,3], [4,5,6]]
x.shape #(2, 3) = (Vector, Scalar): 벡터 2개, 스칼라 3개 → 행렬 1개

x = [[[1], [2]]]
x.shape #(1, 2, 1) = (Metrix, Vector, Scalar): 행렬 1개, 벡터 2개, 스칼라 1개 → 텐서 1개

x = [[1,2,3], [4,5]]
x.shape #(2, 3) = (Vector, Scalar): 벡터 1개, 스칼라 2개 && 벡터 1개, 스칼라 3개  → 행렬 1개

shape: tensor2 ,tensor1, matrix, vector, scalar
→ 최종 도출되는 차원은 1개일 것이므로 출력이 생략 됨
'''

 

➕ Data type에 따른 Model Construction

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense


# 2. Model Construction
model = Sequential()
model.add(Dense(5, input_shape=(13,)))
# 2차원(Matrix) 이상의 input은 input_dim이 아닌 input_shape 사용
# (Vector, Scalar) 형태를 input_shape에 사용할 경우(scalar, ) 형태로 작성

Model에 Input_dim을 지정할 때, data type이 행렬(Matrix) 이상일 경우에는 Input_shape 사용

 

(506, 13): 13개의 특성(col)을 가진 506개의 data

→ input_shape=(13, )

(506, 10, 3): (10, 3)의 특성을 가진 506개의 data

→ input_shape=(10, 3)

 

 

 

소스 코드

🔗 HJ0216/TIL

 

참고 자료

📑 스칼라, 벡터, 행렬, 텐서

 

'Naver Clould with BitCamp > Aartificial Intelligence' 카테고리의 다른 글

Matplotlib: Scatter and plot  (0) 2023.01.21
Split training data and test data  (0) 2023.01.21
MultiLayer Perceptron  (0) 2023.01.20
Hyper-parameter Tuning  (0) 2023.01.20
Types of Artificial Neural Networks  (0) 2023.01.15