我有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)
我觉得在“模型拟合”过程中,“特征张量”的维数有问题,即最后一个命令。。。但我不知道这有什么问题:(
你的直觉是对的,问题是张量的维数。如果您查看TimeDistributed的文档,您会看到一个包含图像和二维层的示例。输入必须具有以下形状:批次大小、时间步长、x尺寸、y尺寸、通道。由于使用时间序列,您需要:批量大小、时间步长、1、功能。例如,您可以通过numpy重塑数据:
feature_tensor = np.reshape(feature_tensor, (-1, 5, 1, 9))
但是,我不确定将Conv1D与TimeDistributed结合起来是否有用,因为在这种情况下,您仅对特征应用卷积,而不对时间连续值应用卷积,其中应应用1d卷积
相关问题 更多 >
编程相关推荐