首页 > 解决方案 > 为什么 Conv1D 输出维度问题?

问题描述

我有一个由 2000 个样本组成的大约 2000 个光谱的阵列。(2000X2000 阵列)。

我遇到了一个简单网络的问题:

def create_model_LCNN(vec_size):
        model = models.Sequential()
        model.add(Conv1D(filters=64, kernel_size =10, input_shape=(vec_size, 1)))
 
    model.compile(optimizer='adam',
        loss='categorical_crossentropy',
        metrics=['accuracy'])

    return model

history = model.fit(X_train,
          y_train,
          epochs=30,
          batch_size=64,
          validation_data=(X_val, y_val),
          callbacks=[early_stopping_monitor])

我得到以下错误的回应:

ValueError:层顺序的输入 0 与层不兼容::预期 min_ndim=3,发现 ndim=2。收到的完整形状:(64, 2924)

我见过多个类似的问题,基本上说改变输入的暗淡。

为什么它需要一个 3-dim 数组?如何考虑参数时间步长?它是否寻求一个序列(我经常看到的另一个术语)?什么顺序?

标签: pythonkerasdeep-learning

解决方案


Conv1D的文档中:

该层创建了一个卷积核,该核与层输入在单个空间(或时间)维度上进行卷积,以产生输出张量。

这意味着如果您的元素只是标量(不是向量,这是一般情况,也涵盖了标量的情况 - 长度 1),您应该扩展输入数组的最后一个维度:

X_train = np.expand_dims(X_train, 2)

这会产生一个 shape 数组,该数组对图层操作(cca 2000, 2924, 1)有效。Conv1D您的元素(您拥有cca 2000的)将被视为向量(排名 1 的张量),并使用64经过训练的 shape 内核独立进行卷积(10, 1)


推荐阅读