我正试图建立一个模型,根据当前市场条件预测某种商品的价格,我的数据形状类似于
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 中