【问题标题】:how to fit train CNN with the appropriate input shape?如何使用适当的输入形状来训练 CNN?
【发布时间】:2020-12-09 15:43:47
【问题描述】:

我正在尝试使用标准普尔 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]

【问题讨论】:

    标签: python keras conv-neural-network


    【解决方案1】:

    expected min_ndim=3, found ndim=2.

    在使用 Conv1D 时,Keras 需要 3 维数组:预期的形状是 [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)))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-27
      • 2016-07-15
      • 1970-01-01
      • 1970-01-01
      • 2021-07-03
      • 2016-06-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多