假设我有这 7 个时间序列样本:
1,2,3,4,5,6,7
我知道每个样本与其之前的两个样本之间存在某种关系。这意味着当您知道两个较早的样本时1,2
,您就可以预测下一个样本一定是3
,并且2,3
下一个样本是4
,依此类推。
现在我想为上述样本训练RNN
一个LSTM
层。我所做的是:
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)
但我遇到了这个错误:
ValueError: Data cardinality is ambiguous:
x sizes: 7
y sizes: 5
Make sure all arrays contain the same number of samples.
我不知道我要如何改变形状X
并Y
解决问题?
有几个问题。首先,由于监督培训,您需要确保巴黎培训(
X
和相应培训Y
)的长度相同。接下来,由于您想要构建一个采用1
和2
并预测 的模型3
,因此您还需要相应地准备数据加载器,以便它生成两个值 asX
和一个目标值Y
;例如,首先,它可能如下:X[0]: [[1], [2]]
和Y[0]: [3]
。最后,在最后一层中,您使用了激活,softmax
但此处使用不正确,而应该是线性激活。下面是完整的工作代码。数据生成器
模型
预言