完成RNN的菜鸟。
我在网上看到了这段代码:
def buildModel(dataLength, labelLength):
height = Input(shape=(dataLength, 1), name="height")
weight = Input(shape=(dataLength, 1), name="weight")
heightLayers = LSTM(64, return_sequences=False)(height)
weightLayers = LSTM(64, return_sequences=False)(weight)
output = concatenate([ heightLayers, weightLayers ])
output = Dense(labelLength, activation="linear", name="weightedAverage_output")(output)
model = Model(
inputs=[height, weight],
outputs=[output]
)
model.compile(optimizer="rmsprop", loss="mse")
return model
我应该输入时间序列数据作为numpy数组,但我不确定这里预期的numpy数组形状高度/重量
我传递了类似
的内容[[[ 0]
[ 1]
[ 2]
[ 3]
[ 4]
....
[ 10]]]
并且它给了我这个错误
ValueError:检查输入时出错:预期接近有形状(无,60,1)但得到的形状为数组(2,45,1)
有什么想法吗?
答案 0 :(得分:0)
您需要两次输入形状(batch_size, dataLength, 1)
作为输入。在这种特定情况下,它是(batch_size, 60, 1)
。
现在,batch_size
是您将用于更新权重的数据点数。它可以是1或它可以是n(所有数据)。最常见的batch_size是2的幂,因此如果您不确定,64
或128
应该没问题。 (错误说None
,因为它没有严格的形状要求)
dataLength
是您特定的问题,它是dataLengthx2,因为您的heightLayers
单元格和weightLayers
单元格想要获取大小为dataLength的高度输入,并且您的权重输入大小为dataLength。你可以看到:
model = Model(
inputs=[height, weight], # requested input shape is height + weight
outputs=[output] # outputs a tensor of shape labelLength
)
如果您只想运行并查看模型是否正常工作,您可以提供类似的内容,它应该有效:
[numpy.zeros((32,30,1)), numpy.zeros((32,30,1))] # one for height, one for width
编辑:再次查看您的错误,看起来它需要一个形状为(batch_size, 60, 1)
的输入。看起来它想要连接数组(它在我的设置上的行为不同,需要两个输入的列表)。
所以你应该尝试:
np.zeros((32,60,1))
看看它是否有效。
编辑2:抱歉,我在第一次观看时误解了你的输入。看看你发布的pastebin。你的dataLength
是60.所以网络需要两个形状为(batch_size, dataLength, 1)
的numpy数组。
所以这应该有效:
batch_input = [np.zeros((32,60,1)), np.zeros((32,60,1))]
batch_labels = np.ones((32,4))
model.fit(batch_input, batch_labels)
哦,重要的补充,如果您使用keras,可以致电model.summary()
以获得有关图层结构的更多信息。在这种情况下,它应该显示它以2个输入图层开始,每个图层都需要(None, 60, 1)
形状。