python – Keras误解了训练数据的形状
我的训练数据的形式(?,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]),... ) 掩蔽 或者,您可以填充数据,以便所有样本具有相同的长度,使用零或一些虚拟值. 然后,在模型中的任何内容之前,您可以添加一个将忽略这些填充段的蒙版图层. (警告:某些类型的图层不支持屏蔽) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |