TF 2.0 顺序 CNN 进入 LSTM 以进行回归"Negative dimension size"误差



我正试图建立一个模型,根据当前市场条件预测某种商品的价格,我的数据形状类似于

num_samples = 100
sample_dimension = 10
XXX = np.random.random((num_samples,sample_dimension)).reshape(-1,1,sample_dimension)
YYY = np.random.random(num_samples).reshape(-1,1)

所以我得到了100个X数据的有序样本,每个样本由10个变量组成。我的型号看起来像下面的

model = keras.Sequential()
model.add(tf.keras.layers.Conv1D(4,
kernel_size = (2),
activation='sigmoid',
input_shape=(None, sample_dimension),
batch_input_shape = [1,1,sample_dimension]))
model.add(tf.keras.layers.AveragePooling1D(pool_size=2))
model.add(tf.keras.layers.Reshape((1, sample_dimension)))
model.add(tf.keras.layers.LSTM(100,
stateful = True,
return_sequences=False,
activation='sigmoid'))
model.add(keras.layers.Dense(1))
model.compile(optimizer='adam',
loss='mean_squared_error',
metrics=['accuracy'])

所以它是一个1D卷积,一个池,一个重塑(所以它对lstm很好(,然后向下投射到预测

但是当我尝试运行它时,我得到以下错误

对于输入形状为[1,1,10,10]、[1,2,10,4]的'conv1d/conv1d'(op:'Conv2D'(,从1中减去2导致的负维度大小。

我尝试了一些不同的内核大小、池大小和batch_input_shape值(必须对我的输入进行批处理,因为我的实际数据分布在几个大文件中,所以我想一次读取一个,并将其用于训练模型(,但似乎什么都不起作用。

我做错了什么?我如何在数据通过此模型时跟踪/预测数据的形状?数据/变量应该是什么样子?

我最终浏览了conv2D的教程,然后将内容转换为conv2D(请根据需要进行编辑(

conv2D解决方案

model = keras.Sequential()
model.add(tf.keras.layers.Conv2D(4,
kernel_size = (**1**,2),
activation = 'sigmoid',
input_shape = (**1**,sample_dimension,1),
batch_input_shape = [None,**1**,sample_dimension,1]))
model.add(tf.keras.layers.AveragePooling2D(pool_size=(1,2)))
#model.add(tf.keras.layers.Reshape((1,sample_dimension)))
model.add(tf.keras.layers.Flatten())
model.add(keras.layers.Dense(1))

然后,我从每个必要的参数(粗体1s(中取出一个维度,将其转换为conf1D

model = keras.Sequential()
model.add(tf.keras.layers.Conv1D(4,
kernel_size = 2,
activation = 'sigmoid',
input_shape = (sample_dimension,1),
batch_input_shape = [None,sample_dimension,1]))
model.add(tf.keras.layers.AveragePooling1D(pool_size=2))
#model.add(tf.keras.layers.Reshape((1,sample_dimension)))
model.add(tf.keras.layers.Flatten())
model.add(keras.layers.Dense(1))

我想关键的结论是张量流不是用来处理向量甚至矩阵的,所以最后一个维度必须是张量的维度——在这种情况下,它是一个1D张量(只是一个数字(,保存在sample_dimension 中

相关内容

  • 没有找到相关文章

最新更新