我正在尝试使用S&P 500数据集训练CNN和LSTM网络。这是火车数据集的形状:
xtrain形状:(6445,16) ytrain形状:(6445,)
这是我给CNN的输入形状:
model.add(TimeDistributed(Conv1D(filters=64, kernel_size=1, activation='relu'), input_shape=(None,16)))
在代码中显示输入形状参数时出现此错误:
ValueError:conv1d_8层的输入0与该层不兼容::预期的min_ndim = 3,找到的ndim = 2。收到完整的图形:[无,16]
答案 0 :(得分:1)
expected min_ndim=3, found ndim=2.
在使用Conv1D时,Keras期望使用三维数组:期望的形状为[batch_size, sequence_length, feature_dimension]
。在您的情况下,您只有一个特征维,我怀疑价格,但是假设您还想传递交易量数据,您将拥有xtrain.shape == (6445,16,2)
。最后一个维度将包含有关价格和数量的信息。
要解决您的问题,您需要将xtrain
重塑为
(batch_size, sequence_length, feature_dimension=(6445,16,1)
为此,您可以使用tensorflow:
xtrain = tf.expand_dims(xtrain, axis=-1) # -1 means expand the LAST axis
或使用numpy:
xtrain = np.expand_dims(xtrain, axis=-1) # -1 means expand the LAST axis
此函数的作用与名称含义相同:它在axis
指定的位置添加了一个新轴。这样就可以使xtrain
具有我们想要的形状,现在您可以继续进行模型制作了,例如:
model = keras.models.Sequential()
model.add(keras.layers.TimeDistributed(keras.layers.Conv1D(filters=64, kernel_size=1, activation='relu'), input_shape=(None,16,1)))