【问题标题】:Trying to understand training data structure试图理解训练数据结构
【发布时间】:2021-06-17 23:31:21
【问题描述】:

我正在尝试训练模型在一行灰度像素之间进行选择。

from sklearn.neural_network import MLPRegressor

X = [[1, 2, 3], [2, 1, 3], [2, 1, 2]]
y = [0, 1, 2]
model = MLPRegressor(hidden_layer_sizes=(10, 10), solver="lbfgs", activation="relu")
model.fit(X, y) 

其中 X 是我想用来训练模型的行列表,y 是模型应该输出的预期像素索引。 (示例值)

img = color.rgb2gray(img)
model.predict(img[0])

img[0] 的打印位置

[0.61176471 0.46045752 0.2627451 ]

在控制台中。这是预期的。

但预测失败:

ValueError:预期的二维数组,得到一维数组:array=[0.61176471 0.46045752 0.2627451]。如果您的数据具有单一特征,或者使用 array.reshape(-1, 1) 重塑您的数据 array.reshape(1, -1) 如果它包含单个样本。

一旦用 :

重塑
line = (np.array(img[0])).reshape(1,-1)

输出:

[[0.61176471 0.46045752 0.2627451 ]]

model.predict(line) 输出

[1.79295143]

我无法解释,因为我正在寻找一个索引概率数组,例如 [0.998, 0.001, 0.001]

在此之前,我使用的 RGB 像素线应该看起来像 [[[R][G][B]],[[R][G][B]],[[R][G ][B]]] 其中字母是介于 0 和 1 之间的值 该模型正在输出一系列概率。 这让我现在认为它没有按预期工作,并且很可能输出与颜色而不是像素相关的概率。

我做错了什么?

【问题讨论】:

  • 您在此处显示的只是灰度图像的 img[0](1 通道而不是 3 通道),因此对我来说在这里有 1 个单一预测看起来很合理。您是否尝试过使用 img 而不是 img[0] 进行训练?

标签: python scikit-learn


【解决方案1】:

当您使用回归时,模型将尝试预测一个连续值,这就是您训练它的方式(注意输出 Y 是单个值):

  • 从 X = [1,2,3] 拟合 Y = 0
  • 从 X = [2,1,3] 拟合 Y = 1
  • 从 X = [2,1,2] 拟合 Y = 2

您期望的输出是分类器的输出,其中每个类都获得一个概率作为输出,即预测的置信度。如果这是您想要/需要的,您应该使用分类模型。并相应地对其进行训练(输出中的每个索引代表一个类)

  • 从 X = [1,2,3] 拟合 Y = [1, 0, 0]
  • 从 X = [2,1,3] 拟合 Y = [0, 1, 0]
  • 从 X = [2,1,2] 拟合 Y = [0, 0, 1]

【讨论】:

  • 感谢它的工作。预测输出现在看起来像 [[0 0 1]]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-03
  • 2020-06-26
  • 2017-04-06
  • 2019-03-02
  • 1970-01-01
  • 1970-01-01
  • 2017-12-30
相关资源
最近更新 更多