将权重添加到拟合之后,预测将变得不合理



我有一个模型,它有几个密集层,在各个方面都表现正常。

然后,我将权重添加到训练事件中(它们的值在0和1之间(:

w = mydata.Weight
#...
kfold = GroupKFold(n_splits=num_folds)
for train, test in kfold.split(X, y, groups=groups):
X_train, X_test = X.iloc[train], X.iloc[test]
y_train, y_test = y.iloc[train], y.iloc[test]
w_train = w.iloc[train]
#...
le_fit = model.fit(X_train, y_train, batch_size=200, epochs=10, sample_weight=w_train, verbose=0)
#...
predictions = np.rint(model.predict(X_test))

预测变得毫无用处:

InvalidArgumentError: `predictions` contains negative values
Condition x >= 0 did not hold element-wise:
x (confusion_matrix_1/Cast:0) = 
[-9223372036854775808 ....... 

为了安全起见,我在层中添加了约束,例如:

layers.Dense(units=800, activation='relu', kernel_constraint=constraints.MinMaxNorm(min_value=0.0, max_value=1.0))

但一切都没有改变。

你能告诉我出了什么问题吗?

编辑:我现在才意识到,这次训练失利也是一个楠。

编辑:我使所有权重等于一。结果不会改变。

编辑:我不知道为什么这个问题被关闭为要求调试。答案表明这与调试无关。它是关于两个非常常用的项目(Keras with GroupKFold(的正确使用,结果发现它包含了一个反直觉的元素,并且它不是特定于问题的。

我会尝试打印样本,看看是否有错误的样本。此外,我会尝试在层之间添加规范化,或者尝试使用更简单的数据(比如生成你认为你的机器肯定应该学习和预测的虚拟数据,并检查你的机器是否在学习一些东西(。

问题是sample_weight采用np.array作为输入,但w_train是ndarray。

它是通过显式创建一个数组来解决的:

w_train_tmp = w.iloc[train]
w_train = np.array(w_train_tmp)

注意:我知道np.array和ndarray在技术上是一样的。如果有人能澄清为什么他们没有在这种情况下,你是最受欢迎的。

最新更新