繁体   English   中英

如何在带有MLPClassifier Sklearn的神经网络中使用自定义损失函数?

[英]How to use a custom loss function in a Neural Network with MLPClassifier Sklearn?

我想使用自定义损失函数在scikit学习中训练神经网络; 使用MLPClassifier。 我想更加重视更大的价值观。 因此,我想使用诸如均方误差之类的方法,但将分子乘以y。 因此,它看起来像:

1 /nΣy(YI-γ(帽)ⅰ)^ 2

这是我模型的代码:

mlp10 = MLPClassifier(hidden_layer_sizes=(150,100,50,25,10), max_iter=1000, 
random_state=42)
mlp10.fit(X_train, y_train)

如何修改损失函数?

我不认为您可以直接修改损失函数,因为在分类器的构造中没有针对它的参数,并且文档中明确指定使用对数损失函数进行优化。 如果您愿意灵活一点,则可以通过在训练之前对y值进行变换,然后在测试后使用逆变换来恢复预测的y s来简单地获得所需的效果。

例如,将y_prime = transform(y)y = inverse_transform(y_prime)映射到您将transforminverse_transform定义为的每个值上:

def transform(y):
    return y ** 2

def inverse_transform(y_prime):
    return math.sqrt(y_prime)

会导致较大的y值对训练产生更大的影响。 显然,您可以尝试不同的转换,以查看哪种方法最适合您的用例。 关键只是确保transform是超线性的。

在训练之前,您需要执行以下操作:

y_train = map(transform, y_train)

并在调用predict

y_predict = model.predict(x)
y_predict = map(inverse_transform, y_predict)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM