繁体   English   中英

Keras误解了训练数据的形状

[英]Keras misinterprets training data shape

我的训练数据的形式(?,15)在哪里? 是一个可变长度。

创建模型时,我指定:

inp = Input(shape=(None,15))
conv = Conv1D(32,3,padding='same',activation='relu')(inp)
...

我的训练数据有形状(35730,?,15)。

在python中检查这个我得到:

X.shape

产出:(35730,)

X[0].shape

产出:(513,15)

当我尝试将我的模型放在我的训练数据上时,我得到了ValueError:

Error when checking input: expected input_1 to have 3 dimensions, but got array with shape (35730, 1)

我只能通过在单个样本上使用model.train_on_batch()来训练我的模型。

我怎么解决这个问题? 似乎keras认为输入数据的形状是(35730,1),实际上是(35730,?,15)

这是keras中的错误还是我做错了什么?

如果重要的话,我正在使用tensorflow后端。 这是keras 2

(编辑,根据OP对这个问题的评论,他们发布了这个链接: https//github.com/fchollet/keras/issues/1920


你的X不是一个numpy数组,它是一个数组数组。 (否则它的形状将是X.shape=(35730,513,15)

它必须是fit方法的单个numpy数组。 由于你有一个可变长度,你不能有一个包含所有数据的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图层。 (警告:某些类型的图层不支持屏蔽)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM