Artificial Intelligence/Deep Learning

[DL] 스칼라, 벡터, 메트릭스, 텐서

inee0727 2022. 6. 20. 16:06
스칼라, 백터, 메트릭스, 텐서

 

1. 스칼라 : 개체 하나하나로, 차원이 없다.
2. 백터 : 스칼라 모임, 1차원으로 구성된 값 
3. 매트릭스 : 2차원으로 구성된 값
4. 텐서 : 3차원으로 구성된 값 (3 이상의 n차원 : n차원 텐서)


key point 
열 = 컬럼 = feature = 특성
= 가장 작은 단위인 스칼렛의 갯수가 열에 해당

 

 

문제 예제) shape를 구하시오.

[[1,2],[3,4],[5,6]] #shape(3,2)
[[[1,2,3,4,5,]]] #shape(1,1,5)
[[1,2,3][1,2,3][4,5,6]] #shape(3,3)
[4,3,2,1,] (4, ) #스칼렛 4, 백터 1
                 #내가 쓴 답 : shape(1,4) > 이와 같이 표현되려면 [[4,3,2,1]]
[[[[1,2,3,],[4,5,6]]]] #shape(1,1,2,3)

[[[[1,2,3,],[4,5,6]]]] 풀이과정

 

[1,2,3],[4,5,6] error


[[1,2,3],[4,5,6]] shape(2,3)


[[[1,2,3],[4,5,6]]] shape(1,2,3)

[[[[1,2,3],[4,5,6]]]] shape(1,1,2,3)


다음 코드 오류 해결하기

 

아래 코드는 두가지 오류로 실행할 수 없다.

(1) x와 y의 사이즈가 맞지 않기 때문이고, (2)input_dim 값을 열의 갯수와 동일한 값으로 설정해야 하기 때문이다.

 

[수정 전]

import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

#1. 데이터
x = np.array([[1,2,3,4,5,6,7,8,9,10],
             [1, 1, 1, 1, 2, 1.3, 1.4, 1.5, 1.6, 1.4]]
            )
y = np.array([11,12,13,14,15,16,17,18,19,20])   

#2. 모델구성 
model = Sequential()
model.add(Dense(5,input_dim=1)) 
model.add(Dense(5)) 
model.add(Dense(5))
model.add(Dense(7))
model.add(Dense(9))  
model.add(Dense(1))  

#3. 컴파일, 훈련
model.compile(loss='mse', optimizer='adam')
model.fit(x,y, epochs=300, batch_size=1)

#4. 평가, 예측
loss = model.evaluate(x,y)
print('loss :',loss)
result = model.predict([[10,1.4]]) #열의 갯수가 동일해야하기 때문에 중괄호가 2번들어간다.
print('[10, 1.4]의 예측값:', result)

 

1. x, y 데이터 사이즈 맞추기

1) x와 y의 데이터 사이즈를 확인한다. x, y의 데이터 사이즈가 다름을 print문을 통해 확인할 수 있다.

x = np.array([[1,2,3,4,5,6,7,8,9,10],
             [1, 1, 1, 1, 2, 1.3, 1.4, 1.5, 1.6, 1.4]]
            )
y = np.array([11,12,13,14,15,16,17,18,19,20])   
print(x.shape)  #(2,10)
print(y.shape)  #(10,)

2) x sizes: 2  y sizes: 10 (shape 사이즈가 다르기 때문에 동일하게 맞춰주어야한다.
3) 데이터 사이즈가 맞지 않기 때문에 x 행열을 (10,2)로 바꿔줘야한다. 
4) 넘파이 행열변환을 통해 x의 행열을 변환시켜준다. 

◆ how to 1

x = x.T #x의 행과 열을 전치하여 다시 x에 집어넣겠다.
print(x)
print(x.shape) #(10,2)


◆ how to 2

x = x.transpose()
print(x)
print(x.shape) #(10,2)

 

2. input_dim 값 바꿔주기

 

수정 전

#2. 모델구성 
model = Sequential()
model.add(Dense(5,input_dim=1)) 
model.add(Dense(4)) 
model.add(Dense(3))
model.add(Dense(4)) 
model.add(Dense(1))

 

수정 후

model = Sequential()
model.add(Dense(5,input_dim=2)) 
model.add(Dense(4)) 
model.add(Dense(3))
model.add(Dense(4)) 
model.add(Dense(1))

 

오류가 난 이유? 
input_dim 값을 1로 주었기 때문이다. 디멘션은 열, 컬럼, 피처, 특성의 갯수이다. 
여기서 열의 갯수는 2이므로 디멘션의 값은 2로 수정해준다.

key point 
모델에 들어가는 디멘션 = 열의 갯수 = 컬럼, feature, 특성의 갯수

 

[수정 후]

import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

#1. 데이터
x = np.array([[1,2,3,4,5,6,7,8,9,10],
             [1, 1, 1, 1, 2, 1.3, 1.4, 1.5, 1.6, 1.4]]
            )
y = np.array([11,12,13,14,15,16,17,18,19,20])   

x = x.T 
print(x)
print(x.shape) #(10,2)

#2. 모델구성 
model = Sequential()
model.add(Dense(5,input_dim=2)) 
model.add(Dense(5)) 
model.add(Dense(5))
model.add(Dense(7))
model.add(Dense(9))  
model.add(Dense(1))  

#3. 컴파일, 훈련
model.compile(loss='mse', optimizer='adam')
model.fit(x,y, epochs=300, batch_size=1)

#4. 평가, 예측
loss = model.evaluate(x,y)
print('loss :',loss)
result = model.predict([[10,1.4]]) #열의 갯수가 동일해야하기 때문에 중괄호가 2번들어간다.
print('[10, 1.4]의 예측값:', result)