【发布时间】:2019-10-25 18:33:59
【问题描述】:
我正在尝试建立一个模型,根据当前市场状况预测某种商品的价格,我的数据类似于
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'])
所以这是一个一维卷积、一个池化、一个重塑(因此它与 lstm 配合得很好),然后向下转换为预测
但是当我尝试运行它时,我收到以下错误
对于输入形状为 [1,1,1,10], [1,2,10,4] 的“conv1d/conv1d”(操作:“Conv2D”)从 1 中减去 2 导致的负尺寸大小。
我已经为内核大小、池大小和 batch_input_shape 尝试了几个不同的值(必须批处理我的输入,因为我的实际数据分布在几个大文件中,所以我想一次读取一个并踢它训练模型),但似乎没有任何效果。
我做错了什么?我如何跟踪/预测通过此模型的数据的形状?数据/变量应该是什么样的?
【问题讨论】:
-
如果去掉池化层会发生什么?
-
@Andy 同样的错误。问题发生在 conv1d 层
-
那么唯一的其他 2 是你的内核大小 - 你确定你的输入都不短于 2 吗?
-
我的输入数据是100个有序样本,每个样本有10个变量
XXX = np.random.random((num_samples,sample_dimension)).reshape(-1,1,sample_dimension)
标签: python conv-neural-network tensorflow2.0 lstm-stateful