我想使用scipy.optimize.check_grad
來檢查我的sigmoid function實現的漸變;這裏是我的Python功能:使用Scipy檢查漸變
def sigmoid(x, gradient=False):
y = 1/(1 + numpy.exp(-x))
return numpy.multiply(y, 1 - y) if gradient else y
這裏的參數和調用check_grad
:
x0 = numpy.random.uniform(-30, 30, (4, 5))
func = sigmoid
grad = lambda x: sigmoid(x, gradient=True)
error = scipy.optimize.check_grad(func, grad, x0)
我得到下面的錯誤。形狀不匹配是指操作xk+d
。任何想法可能會造成這種情況?
File "scipy\optimize\optimize.py", line 597, in approx_fprime
grad[k] = (f(*((xk+d,)+args)) - f0)/d[k]
ValueError: operands could not be broadcast together with shapes (4,5) (4)
如下所述,這是因爲要檢查梯度,您必須迭代矩陣的每個單元和+/-某個epsilon以計算導數(使用標準方程)。 Scipy可以將你的矩陣扁平化。但是,使用'M.flatten()'來傳遞一個扁平版本應該很容易。在Matlab中,你只需要'M(:)'。 – 2013-07-29 01:43:21