数据集形状不匹配Conv1D输入层

时间:2019-07-02 04:02:28

标签: python tensorflow keras keras-layer

尝试将Conv1D图层设置为keras中的输入层。

数据集是1000个时间步长,每个时间步长都有1个特征。

阅读了一堆答案后,我将数据集重塑为以下格式(n_samples,时间步长,特征),这与我的情况相对应:

train_data   = (78968, 1000, 1)
test_data    = (19742, 1000, 1)
train_target = (78968,)
test_target  = (19742,)

我稍后使用以下几行代码创建并编译代码

model = Sequential()
model.add(Conv1D(64, (4), input_shape = (1000,1) ))

model.add(MaxPooling1D(pool_size=2))
model.add(Dense(1))
optimizer = opt = Adam(decay = 1.000-0.999)
model.compile(optimizer=optimizer,
              loss='mean_squared_error',
              metrics=['mean_absolute_error','mean_squared_error'])

然后我尝试拟合,请注意,train_target和test_target是熊猫系列,因此我正在调用DataFrame.values转换为numpy数组,我怀疑那里可能存在问题?

training = model.fit(train_data, 
                 train_target.values,
                 validation_data=(test_data, test_target.values),
                 epochs=epochs,
                 verbose=1)

模型可以编译,但是在尝试拟合时出现错误

Error when checking target: expected dense_4 to have 3 dimensions, 
but got array with shape (78968, 1)

我已经尝试了各种重塑数据的组合,但都无法正常工作。

我以前只在不同的项目中使用了密集层的keras,在该项目中指定了input_dimension而不是input_shape,所以我不确定在这里做错了什么。我已经阅读了几乎所有有关数据形状问题的堆栈溢出问题,而且恐怕问题还在其他地方,我们将不胜感激,谢谢。

1 个答案:

答案 0 :(得分:0)

在行model.add(MaxPooling1D(pool_size=2))下,添加一行model.add(Flatten()),您的问题将得到解决。展平功能将帮助您将数据转换为正确的形状,有关更多信息,请访问此网站https://www.tensorflow.org/api_docs/python/tf/keras/layers/Flatten