处理多头CNN

时间:2019-10-14 12:12:00

标签: tensorflow keras reshape

我正在尝试构建“多头CNN模型”,因此每个头都是一个分支,其中包含各个多变量时间序列数据。

我尚不清楚如何处理“ fit”方法,或者换句话说如何正确准备y_train。标签有2个类别0和1

当前架构如下所示。 neural net architecture

目标是预测提前一个时间

输入形状为:

A Training Data (1, 903155, 5)
B Training Data (1, 903116, 5)
C Training Data (1, 902996, 5)

标签形状:

y_train (903155, 1)

执行时:
history = model.fit(x = [A,B,C], y = y_in)

比我得到的: Input arrays should have the same number of samples as target arrays. Found 1 input samples and 903155 target samples.

将y_in重塑为(1,903155)将导致:

 expected dense_5 (see image) to have shape (1,) but got array with shape (903155,)

奇怪的是 model.predict([A,B,C])产生结果

2 个答案:

答案 0 :(得分:2)

问题的根源是对批处理维度的处理不当;图层和数据的第一个维度是批处理维度。错误说明如下。


解决方案

y_train (903155, 1)是正确的,但是A, B,C可能不正确:它们分别指定一个维度为(903155, 5), (903116, 5),(902996, 5)的样本。我怀疑这是否是理想的-90...的批量尺寸是 ,应该重塑为:(903155, 1, 5),等等。


错误说明

  • 错误1表示您输入了1个样本(训练示例)作为输入,但标签为903155
  • 错误2表示dense_5的输出形状为(None, 1),但在计算损耗时可以与(None, 903155)进行比较
  

输入数组应具有与目标数组相同数量的样本。找到1个输入样本和903155个目标样本。 #错误1

     

预计density_5的形状为(1,),但数组的形状为(903155,)#错误2

答案 1 :(得分:-1)

经过一番挖掘,我发现了答案,因为OverLordGoldDragon提到输入和输出形状不正确。

一维转换期望输入数据始终为: (样本,timesteps_per_sample,features_per_sample)

所以就我而言(1,903155,5)->(903155,1,5)