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

标签 python tensorflow keras keras-layer

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

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

在阅读了一堆答案后,我将数据集重新调整为以下格式(n_samples、timesteps、features),这在我的案例中对应于以下内容:

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 是 pandas 系列,所以我调用 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)

我已经尝试了 reshape 数据的各种组合,但无法使其发挥作用。

我之前只在另一个项目中使用过带有密集层的keras,其中指定了input_dimension而不是input_shape,所以我不确定我在这里做错了什么。我已经阅读了几乎所有有关数据形状问题的堆栈溢出问题,恐怕问题出在其他地方,感谢任何帮助,谢谢。

最佳答案

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

关于python - 数据集形状不匹配 Conv1D 输入层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56845144/

相关文章:

python - 在 Keras 模型中 reshape 编码器解码器

python - 无法从 mnist 数据集生成准确的结果

python - 如何解决 ValueError : Output tensors to a Model must be the output of a Keras `Layer` (thus holding past layer metadata). ?

backend - 如何使用 Keras 切换后端(从 TensorFlow 到 Theano)

python - Scrapy 抓取了 0 页

python - 基于两个 Pandas 列创建一个范围

Python 'map' 函数插入 NaN,是否可以返回原始值?

python - & 和 <and> 在 python 中是否等价?

android - 程序类型已经存在:org.tensorflow.Graph $ Reference

tensorflow - Keras 获取中间层的输出