【问题标题】:CNN for classification of numerical dataset in CSV fileCNN 用于对 CSV 文件中的数值数据集进行分类
【发布时间】:2021-01-20 06:50:32
【问题描述】:

我正在尝试在我的 CSV 文件中的数值数据集上应用 CNN,但我遇到了尺寸问题。我的数据集由 26 个特征/列和 1200 个行/样本组成。数据集有 3 个标签。

Dataset = pd.read_csv("...", header=0)
features = ['...']
x = Dataset [features]
y = Dataset .Classifier
sc = PowerTransformer()
x = sc.fit_transform(x)

x_train, x_test, y_train, y_test = train_test_split(x, y, train_size=0.75)

y_train = to_categorical(y_train)
y_test = to_categorical(y_test)

model = Sequential()
model.add(Conv1D(filters=64, kernel_size=3, activation='relu'))
model.add(MaxPooling1D(pool_size=4))
model.add(LSTM(64))
model.add(Dense(3, activation='softmax'))
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(x_train, y_train, epochs=100, batch_size=8, verbose=1)

accuracy = model.evaluate(x_test, y_test)
print(accuracy)

我收到以下错误: ValueError:检查输入时出错:预期 conv1d_1_input 具有 3 维,但得到的数组形状为 (900, 26)

我不确定如何重塑数据。据我所知,我只需要一个向量。

【问题讨论】:

    标签: python machine-learning classification conv-neural-network


    【解决方案1】:

    你说对了一部分。您确实需要一个向量,但它必须具有不同的维度。
    Conv1D 层作为输入:
    输入形状: 具有形状的 3+D 张量:batch_shape + (steps, input_dim)

    在 model.fit 函数中,您将批量大小设置为 8。这意味着您必须每步提供 8 个样本集(步 = 更新网络权重之前的迭代)。
    您需要做的是生成 8 个样本的集合(或批次),然后将它们提供给您的网络。

    【讨论】:

    • 哦,好的。我知道了。现在可以用了,非常感谢。到目前为止,准确性非常差,我认为 MLP 还是更好,但我也想尝试 CNN。除了 MLP,我没有任何其他经验。我从网上找到的一些随机示例中得到了这个架构。如果有意义的话,您是否有关于具有卷积层、LSTM 甚至其他一些的 NN 架构的建议?我想尝试一下以提高准确性,但真的不知道从哪里开始,而且很难在网上找到带有数值数据集的示例。
    • 您应该查看 MNIST 数据集,它是一个入门数据集,非常适合刚接触卷积神经网络和机器学习视觉的人。您可以尝试使用 ResNet 或 DenseNet 或 keras 提供的任何其他架构。从那里开始,然后尝试自己的想法是相当容易的。 keras.io/api/applications
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-23
    • 1970-01-01
    • 1970-01-01
    • 2020-03-18
    • 2015-02-04
    • 2021-07-24
    • 2016-11-30
    相关资源
    最近更新 更多