为拟合增加权重后,预测变得不合理

Predictions become irrational after adding weights to the fit

我有一个包含多个密集层的模型,在各个方面都表现正常。

然后,我为训练事件添加权重(它们的值在 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))

但没有任何改变。

你能告诉我哪里出了问题吗?

编辑:我现在意识到训练损失也是一个 nan。

编辑:我让所有权重都等于 1。结果不变。

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

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

问题是 sample_weight 将 np.array 作为输入,但 w_train 是一个 ndarray。

通过显式创建数组解决了这个问题:

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

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