Andrew NG の第 3 週の課題を matlab ではなく Python で解決しようとしていますが、fmin_bfgs が ex2.m ファイルの fminunc と同様に等しいことがわかりました。
問題は、コスト関数と勾配を fmin_bfgs に計算する関数を入力しようとすると、次のようなトレースバックが返されることです: TypeError: 'numpy.ndarray' object is not callable. 問題をデバッグするのに苦労しているので、助けていただければ幸いです
# code that produces the error:
results = opt.fmin_bfgs(costFunction.cost_function(weights, data_input, desired_output), weights,
fprime=costFunction.compute_grad(weights, data_input, desired_output), maxiter=400)
#the costFunction module:
import numpy as np
import sigmoid
def cost_function(theta, x, y):
size = np.shape(x)
z = np.dot(x, theta)
h = sigmoid.sigmoid(z)
j = (1 / size[0]) * (np.dot(-y, np.log(h)) - np.dot((1 - y), np.log(1 - h)))
return j
def compute_grad(theta, x, y):
size = np.shape(x)
z = np.dot(x, theta)
h = sigmoid.sigmoid(z)
error = np.subtract(h, y)
grad = (1 / size[0]) * np.dot(np.transpose(error), x)
return grad