[DL] 스칼라, 벡터, 메트릭스, 텐서
스칼라, 백터, 메트릭스, 텐서
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)