【问题标题】:Training Sci-kit Learn Neural Network with 2D inputs使用 2D 输入训练 Sci-kit Learn 神经网络
【发布时间】:2019-01-29 16:00:57
【问题描述】:

我正在尝试使用 Python 中的 sci-kit learn 来训练神经网络,以识别图像中的形状。我有一个位于边缘上的点列表,每个边缘用 x 和 y 坐标表示,格式为 [x,y]。所以,我想使用[[x,y],[x,y],[x,y],[x,y],[x,y],[x,y],etc.] 格式的列表来训练网络。我使用以下代码尝试了此操作,但出现以下错误:

from sklearn.neural_network import MLPClassifier
X = [[[0., 0.], [0., 0.]], [[1., 1.], [1., 1.]]]
y = [0, 1]
clf = MLPClassifier(solver='lbfgs', alpha=1e-5,
                hidden_layer_sizes=(5, 2), random_state=1)

clf.fit(X, y)

ValueError: Found array with dim 3. Estimator expected <= 2.

如果可能的话,有没有人对我如何解决这个问题有任何建议。根据神经网络的定义和逻辑,我不太确定这是否可能。请让我知道任何建议。谢谢!

【问题讨论】:

  • 不同样本的点数可以不同吗?我的意思是在第一个样本中你只有 2 个边缘点,[[x1,y1], [x2,y2]],但接下来你有 3 个 - [[x1,y1], [x2,y2], [x3,y3]]。如果它们是常量,您可以将它们转换为每个样本的单个列表[x1, y1, x2, y2, x3, y3..],然后通过。 Scikit-learn 不接受除 2-d 形状的特征矩阵之外的任何其他形状。
  • 感谢您的回复@VivekKumar。点数会有所不同,但我可能会尝试这样的事情。

标签: python machine-learning scikit-learn neural-network


【解决方案1】:

Scikit-learn 最多需要二维输入。您可以尝试合并列表以降低维度。我使用下面的代码使其成为二维数据,它对我来说很好

from sklearn.neural_network import MLPClassifier
import numpy as np
X = [[[0., 0.], [0., 0.]], [[1., 1.], [1., 1.]]]
y = [0, 1]
clf = MLPClassifier(solver='lbfgs', alpha=1e-5,
            hidden_layer_sizes=(5, 2), random_state=1)
X_new = []
for i in X:
    temp =[] 
    for j in i:
        for k in j:
            temp.append(k)
    X_new.append(temp)
clf.fit(X_new,y)

循环结束时的 X_new 将如下所示

[[0.0, 0.0, 0.0, 0.0], [1.0, 1.0, 1.0, 1.0]]

准确性取决于数据。试试看是否有效

【讨论】:

    猜你喜欢
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 2012-04-02
    • 2018-08-19
    • 2010-11-20
    • 2019-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多