Suponha que eu tenha estas 7 amostras de séries temporais:
1,2,3,4,5,6,7
Eu sei que existe uma relação entre cada amostra e as duas anteriores. Isso significa que quando você sabe que duas amostras anteriores são 1,2
, você pode prever que a próxima deve ser 3
e 2,3
a próxima é 4
e assim por diante.
Agora quero treinar RNN
com uma LSTM
camada para as amostras acima. O que eu fiz foi:
import numpy as np
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
X = np.array([[[1]],[[2]],[[3]],[[4]],[[5]],[[6]],[[7]]])
Y = np.array([[3],[4],[5],[6],[7]])
model = keras.Sequential([
layers.LSTM(16, input_shape=(2, 1)),
layers.Dense(1, activation="softmax")
])
model.compile(optimizer="rmsprop",
loss="mse",
metrics=["accuracy"])
model.fit(X, Y, epochs=1, batch_size=1)
Mas me deparei com este erro:
ValueError: Data cardinality is ambiguous:
x sizes: 7
y sizes: 5
Make sure all arrays contain the same number of samples.
Não sei como tenho que mudar a forma X
e Y
resolver o problema?
Existem alguns problemas. Primeiro , por causa do treinamento de supervisão, você precisa ter certeza de que a duração do treinamento paris (
X
e correspondenteY
) é a mesma. Em seguida , como você deseja construir um modelo que tome1
e2
preveja3
, é por isso que você também precisa preparar seu carregador de dados de acordo, de modo que ele produza dois valores comoX
e um valor alvo comoY
; por exemplo, em primeira instância, pode ser o seguinte:X[0]: [[1], [2]]
eY[0]: [3]
. Por último , em sua última camada, você usou a ativaçãosoftmax
que é incorreta para usar aqui; em vez disso, deveria ser uma ativação linear. Abaixo está o código de trabalho completo.Gerador de dados
Modelo
Predição