检查Keras Conv1D第一层中的输入时出错

时间:2019-06-04 15:54:01

标签: python python-2.7 keras

我正在尝试使用带有Keras的CNN将两个类别(正/负)之一分配给音频。我的模型应该接受各种长度的输入(框架),其中每个框架包含41个要素,但是我在输入大小方面感到吃力。请记住,我还没有获取完整的数据集,所以我只是嘲笑了一些毫无意义的数据,只是为了检查网络是否工作正常。

根据文档https://keras.io/layers/convolutional/,据我最好的理解,如果input_shape元组的第一个元素为None,Conv1D可以处理各种长度。包含输入数据X_train.shape的变量的形状为(4, 497, 41)

 data = pd.read_csv('output_file.csv', sep=';')
    featureCount = data.values.shape[1]


    #mocks because full data is not available yet
    Y_train = np.asarray([1, 0, 1, 0])

    X_train = np.asarray(
        [np.array(data.values, copy=True), np.array(data.values, copy=True), np.array(data.values, copy=True),
         np.array(data.values, copy=True)])

    # variable length with 41 features
    model = keras.models.Sequential()
    model.add(keras.layers.Conv1D(100, 5, activation='relu', input_shape=(None, featureCount)))

    model.add(keras.layers.GlobalMaxPooling1D())
    model.add(keras.layers.Dense(10, activation='relu'))
    model.add(keras.layers.Dense(1, activation='sigmoid'))
    model.compile(optimizer='adam',
                  loss='binary_crossentropy',
                  metrics=['accuracy'])
    model.summary()

    model.fit(X_train, Y_train, epochs=10, verbose=False, validation_data=(np.array(data.values, copy=True), [1]))

此代码产生错误 ValueError: Error when checking input: expected conv1d_input to have 3 dimensions, but got array with shape (497, 41)。因此,似乎第一个维度被切掉了,因为它包含训练样本(对我而言似乎是正确的),令我困扰的是所需的维度,为什么是3?

在寻找答案之后,我偶然发现了Dimension of shape in conv1D,然后添加了最后一个维度(使用X_train = np.expand_dims(X_train, axis=3)),该维度仅包含一位数字,但最终出现了另一个类似的错误:

ValueError: Error when checking input: expected conv1d_input to have 3 dimensions, but got array with shape (4, 497, 41, 1)现在看来,以前被视为样本“列表”的第一个维度现在已成为实际数据的一部分。

我还尝试摆弄input_shape参数,但无济于事,并使用Reshape层,但最终还是争夺了尺寸

我该怎么做才能满足所需的形状?如何准备要处理的数据?

0 个答案:

没有答案