我正在尝试使用CNN、LSTM和MLP进行时间序列预测。但当我使用CNN的时间分布时,在拟合过程中,它给出了维度误差

2024-06-09 01:20:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有9个特征,一个输出变量,即待预测,窗口大小为5 代码在没有“TimeDistributed”命令的情况下运行良好

MODEL INPUT SHAPE: feature_tensor.shape=(1649, 5, 9) MODEL OUTPUT SHAPE: y_train.shape= (1649,)

Thats my Code:
    #Build the network model
    act_fn='relu'
    modelq = Sequential()
    modelq.add(TimeDistributed(Conv1D(filters=105, kernel_size=2, activation=act_fn, input_shape=(None, feature_tensor.shape[1],feature_tensor.shape[2]))))
    modelq.add(TimeDistributed(AveragePooling1D(pool_size=1)))
    modelq.add(TimeDistributed(Flatten()))
    modelq.add(LSTM(50))
    modelq.add(Dense(64, activation=act_fn))
    
    modelq.add(Dense(1))
    
    #Compile the model
    modelq.compile(optimizer='adam', loss='mean_squared_error') 
    modelq.fit(feature_tensor, y_train ,batch_size=1, epochs=epoch_count)

错误声明是: ValueError:层conv1d的输入0与层不兼容::预期最小值ndim=3,发现ndim=2。收到完整形状:(5,9)

我觉得在“模型拟合”过程中,“特征张量”的维数有问题,即最后一个命令。。。但我不知道这有什么问题:(


Tags: the命令addsizemodeltrain特征act
1条回答
网友
1楼 · 发布于 2024-06-09 01:20:57

你的直觉是对的,问题是张量的维数。如果您查看TimeDistributed的文档,您会看到一个包含图像和二维层的示例。输入必须具有以下形状:批次大小、时间步长、x尺寸、y尺寸、通道。由于使用时间序列,您需要:批量大小、时间步长、1、功能。例如,您可以通过numpy重塑数据:

feature_tensor = np.reshape(feature_tensor, (-1, 5, 1, 9))

但是,我不确定将Conv1D与TimeDistributed结合起来是否有用,因为在这种情况下,您仅对特征应用卷积,而不对时间连续值应用卷积,其中应应用1d卷积

相关问题 更多 >