import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, SimpleRNN, LSTM, GRU
from tensorflow.keras.layers import Bidirectional
from tensorflow.keras.callbacks import EarlyStopping
#1. 데이터
datasets = np.array([1,2,3,4,5,6,7,8,9,10])
x = np.array([[1,2,3],[2,3,4],[3,4,5],[4,5,6],[5,6,7],[6,7,8],[7,8,9]])
y = np.array([4, 5, 6, 7, 8, 9, 10])
print(x.shape, y.shape) #(7, 3) (7,)
x = x.reshape(7, 3, 1)
print(x)
#Bidirectional은 혼자서 작동이 안됨.
#지정한 함수를 양방향으로 사용하게 해주는 함수
#Bidirectional은 RNN을 함께 써줘야한다 (wrapping 한다고 함)
#Bidirectional의 첫번째 파라미터는 rnn같은 함수이고, 두번째 파라미터는 인풋 쉐이프
#2. 모델구성
model = Sequential()
# model.add(Bidirectional(SimpleRNN(10), input_shape=(3,1)))
model.add(Bidirectional(LSTM(10, return_sequences=True), input_shape=(3,1))) #리턴 시퀀스 해주면 똑같이 LSTM을 재사용 할 수 있다
model.add(LSTM(10, return_sequences=True))
model.add(Bidirectional(GRU(10)))
model.add(Dense(1))
model.summary()
# Layer (type) Output Shape Param #
# =================================================================
# bidirectional (Bidirectiona (None, 20) 240
# l)
# dense (Dense) (None, 1) 21
# =================================================================
# 50, 60, 70의 결과물 : [[81.521194]]