(根据OP对此问题的评论进行编辑,他们发布了此链接:https://github.com/fchollet/keras/issues/1920 https://github.com/fchollet/keras/issues/1920)
Your X
不是单个 numpy 数组,而是数组的数组。 (否则它的形状将是X.shape=(35730,513,15)
.
它必须是单个 numpy 数组fit
方法。由于长度可变,因此不能有一个包含所有数据的 numpy 数组,您必须将其分成更小的数组,每个数组包含相同长度的数据。
为此,您可能应该按形状创建字典,并手动循环字典(可能还有其他更好的方法来执行此操作......):
#code in python 3.5
xByShapes = {}
yByShapes = {}
for itemX,itemY in zip(X,Y):
if itemX.shape in xByShapes:
xByShapes[itemX.shape].append(itemX)
yByShapes[itemX.shape].append(itemY)
else:
xByShapes[itemX.shape] = [itemX] #initially a list, because we're going to append items
yByShapes[itemX.shape] = [itemY]
最后,循环这个字典进行训练:
for shape in xByShapes:
model.fit(
np.asarray(xByShapes[shape]),
np.asarray(yByShapes[shape]),...
)
Masking
或者,您可以使用零或一些虚拟值填充数据,使所有样本具有相同的长度。
然后在模型中的任何内容之前,您可以添加一个Masking
将忽略这些填充段的层。 (警告:某些类型的图层不支持遮罩)