层conv1d的输入与该层不兼容: 期望最小维度=3,但实际维度=2。完整的形状为:(None, 30)。

12

我一直在开发一个项目,使用时间序列数据与天气数据结合来估计交通流量。我的时间序列窗口为30个值,我使用了20个与天气相关的特征。我使用功能性API来实现这个项目,但是我一直遇到同样的错误,不知道该如何解决。我看过其他类似的帖子,比如这个Input 0 of layer conv1d_1 is incompatible with the layer: expected ndim=3, found ndim=2. Full shape received: [None, 200],但是没有帮助。

这是我的模型,

series_input = Input(shape = (series_input_train.shape[1], ), name = 'series_input')
x = Conv1D(filters=32, kernel_size=5, strides=1, padding="causal", activation="relu")(series_input)
x = LSTM(32, return_sequences = True)(x)
x = LSTM(32, return_sequences = True)(x)
x = Dense(1, activation = 'relu')(x)
series_output = Lambda(lambda w: w * 200)(x)

weather_input = Input(shape = (weather_input_train.shape[1], ), name = 'weather_input')
x = Dense(32, activation = 'relu')(weather_input)
x = Dense(32, activation = 'relu')(x)
weather_output = Dense(1, activation = 'relu')(x)

concatenate = concatenate([series_output, weather_output], axis=1, name = 'concatenate')

output = Dense(1, name = 'output')(concatenate)

model = Model([series_input, weather_input], output)

series_input_trainweather_input_train的形状分别为(34970, 30)和(34970, 20)。

我不断收到的错误是这个:

ValueError: Input 0 of layer conv1d is incompatible with the layer: : expected min_ndim=3, found ndim=2. Full shape received: (None, 30)

我做错了什么?

老实说,我一直有困难弄清楚TensorFlow中输入的形状是如何工作的。如果你能指导我正确方向,我将不胜感激,但现在我需要的是修复我的模型。


你解决了吗? - f_s
2个回答

4
如Tao-Lung所说,卷积层的第一个连接需要一个3维的形式。在序列上进行1D卷积需要一个3D的输入。换句话说,对于每个batch的元素,对于每个时间步,有一个单一的向量。如果您想让步长为1,可以按以下方式解决问题:

series_input = Input(shape=(series_input_train.shape[1], 1))


x = Conv1D(filters=32, kernel_size=5, strides=1, padding="causal", activation="relu", input_shape=[None, series_input])


0

问题

形状为 batch_shape + (steps, input_dim) 的 3+D 张量 https://keras.io/api/layers/convolution_layers/convolution1d/

解决方案

您没有指定 "steps" 参数。
如果 "steps" 为 1,请使用以下代码:

import numpy as np
series_input_train = np.expand_dims(series_input_train, axis=1)
weather_input_train = np.expand_dims(weather_input_train, axis=1)    

那么我应该传递什么给我的输入层的形状参数呢?我现在遇到了这个错误,卷积1D层的输入0与该层不兼容::期望最小维数= 3,发现维数= 2。使用此层时收到完整形状:(无,30),其中series_input = Input(shape =(series_input_train.shape [1],),name ='series_input') - Minura Punchihewa
在上述网站中,输入是10个时间步长的128长度向量,并且批次大小为4。 输入形状=(4,10,128) - Tao-Lung Huang
我的输入不是向量,它们只是一个包含30个值的序列。 - Minura Punchihewa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接