我想基于两个不同的时间序列X2和X3预测n点的时间序列X1,每个时间序列也分别为n点。这些时间序列相互作用,所以我希望使用与组合图像以产生另一幅图像类似的方法。
到目前为止,我已经成功实现了一个自动编码器,以学习并返回所有时间序列(X1,X2,X3)。当我试图建立一个神经网络以仅使用X2和X3来预测X1(3000个单位)时,该模型无法编译,并且出现错误:
Error when checking target: expected sequential_9 to have 2 dimensions, but got array with shape (61, 3000, 1, 1)
以不同的组合在flatten_x
或dense_x
处中断。
如果我的输出只有一个单位而不是3000,它就可以工作。
我尝试过的网络将具有以下几层:
Layer (type) Output Shape Param #
=================================================================
input_8 (InputLayer) (None, 3000, 2, 1) 0
_________________________________________________________________
conv2d_10 (Conv2D) (None, 3000, 2, 32) 96
_________________________________________________________________
max_pooling2d_7 (MaxPooling2 (None, 1500, 2, 32) 0
_________________________________________________________________
flatten_7 (Flatten) (None, 96000) 0
_________________________________________________________________
dense_6 (Dense) (None, 3000, 1, 32)
这是我用来创建网络的代码:
network = Sequential((
Conv2D(filters=32, kernel_size=(1,2), activation='relu', input_shape=(x, y, inChannel)),
MaxPooling2D(pool_size = (2, 1)),
Flatten(),
Dense(3000, activation='relu'),
))
network.compile(loss='mean_squared_error', optimizer = RMSprop())
输入的形状为(61,3000,2,1)。
我应该在某个地方指定期望的输入/输出,但是我没有这样做吗?进行一些数据转换?也许使用其他架构?
感谢所有建议!
答案 0 :(得分:0)
您编码的网络没有您想要的架构
如果您打印出
network.summary()
您得到
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_6 (Conv2D) (None, 3000, 1, 32) 96
_________________________________________________________________
max_pooling2d_6 (MaxPooling2 (None, 1500, 1, 32) 0
_________________________________________________________________
flatten_6 (Flatten) (None, 48000) 0
_________________________________________________________________
dense_6 (Dense) (None, 3000) 144003000
=================================================================
Total params: 144,003,096
Trainable params: 144,003,096
Non-trainable params: 0
因此,您必须更改架构以获得所需的输出形状。