如何解释scipy中checkgrad函数的输出?

scipy.optimize.check_grad的预期输出是梯度与梯度的有限差分近似之间的差异的2-范数。我无法从输出中判断我的梯度是否足够好。是否有某个范围内的值是必须的?什么样的误差是可以接受的?


回答:

你的梯度函数返回一个向量,我们称之为g,而scipy的数值方法给你提供了一个好的(尽管成本较高)的估计v。现在你得到的是

||g-v|| = sqrt( SUM_{i=1}^d (g_i - v_i)^2 )

换句话说,这是你的梯度在所有维度上的平方误差的平方根。什么样的误差是可以接受的?这取决于函数和梯度的维度。我认为超过10e-4的误差总是错误的。尽管回答10e-410e-10是否可以接受取决于你的具体应用——简单随机优化的要求与解决某些复杂数值模拟的精确方法的要求不同,前者有时只需要每个维度的符号而不是数值。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注