我有 9 个特征,一个输出变量,即待预测,窗口大小为 5 代码在没有“TimeDistributed”命令的情况下运行良好
<块引用>模型输入形状:feature_tensor.shape=(1649, 5, 9) 模型输出 形状: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 与层不兼容:预期 min_ndim=3,发现 ndim=2。收到完整形状:(5, 9)
我觉得“模型拟合”期间“feature_tensor”的维度有问题,即最后一个命令......但我不知道它有什么问题:(
答案 0 :(得分:0)
你的直觉是对的,问题是tensor_feature的维度。如果您查看 TimeDistributed 的文档,您会看到一个包含图像和 Conv2d 层的示例。输入必须具有以下形状:batch_size、时间步长、x_dim、y_dim、通道。由于您使用时间序列,因此您需要:batch_size、时间步长、1、特征。例如。您可以通过 numpy 重塑您的数据:
feature_tensor = np.reshape(feature_tensor, (-1, 5, 1, 9))
但是,我不确定将 Conv1D 与 TimeDistributed 结合使用是否有用,因为在这种情况下,您只对特征应用卷积,而不对应该应用一维卷积的时间连续值应用卷积。