[英]Scipy optimization algorithms? (for minimizing neural network cost function) - python
我在python中编写了一个具有成本函数的神经网络对象,并通过反向传播确定其渐变。 我在这里看到了一堆优化函数,但我不知道如何实现它们。 我也很难找到任何可以学习的示例代码。
显然,我需要以某种方式告诉它我正在尝试改变哪些参数,我试图最小化的成本函数,然后是由backprop计算的梯度。 我怎么告诉fmin_cg什么是什么?
奖金问题:我在哪里可以了解各种算法的使用差异?
=====好的,更新=====
这就是我的主题:
def train(self, x, y_vals, iters = 400):
t0 = concatenate((self.hid_t.reshape(-1), self.out_t.reshape(-1)), 1)
self.forward_prop(x, t0)
c = lambda v: self.cost(x, y_vals, v)
g = lambda v: self.back_prop(y_vals, v)
t_best = fmin_cg(c, t0, g, disp=True, maxiter=iters)
self.hid_t = reshape(t_best[:,:(hid_n * (in_n+1))], (hid_n, in_n+1))
self.out_t = reshape(t_best[:,(hid_n * (in_n+1)):], (out_n, hid_n+1))
而且,这是它抛出的错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "netset.py", line 27, in <module>
net.train(x,y)
File "neuralnet.py", line 60, in train
t_best = fmin_cg(c, t0, g, disp=True, maxiter=iters)
File "/usr/local/lib/python2.7/dist-packages/scipy/optimize/optimize.py", line 952, in fmin_cg
res = _minimize_cg(f, x0, args, fprime, callback=callback, **opts)
File "/usr/local/lib/python2.7/dist-packages/scipy/optimize/optimize.py", line 1017, in _minimize_cg
deltak = numpy.dot(gfk, gfk)
ValueError: matrices are not aligned
... HALP!
我从未使用过fmin_cg。 我猜v是你的体重矢量。 当我阅读文档时,我在代码中没有发现错误。 但是我搜索了你的错误,我发现了这个: 矩阵没有对齐错误:Python SciPy fmin_bfgs
此外,我认为g(v)总是在c(v)之后计算并不是值得注意的。 因此,您的反向传播函数应该再次向前传播x:
c = lambda v: self.cost(x, y_vals, v)
g = lambda v: self.cost(x, y_vals, v); self.back_prop(y_vals, v)
# ------------------------
或者你可以传递一个返回成本函数的函数和一个作为元组的渐变来避免两个向前传播,正如Issam Laradji所提到的那样。
关于人工神经网络优化算法的好文章是:
我可以推荐Levenberg-Marquardt。 这种算法非常有效。 不幸的是,每个迭代步骤都具有立方复杂度O(n ^ 3)。
仅解决奖金问题:Coursera有一个关于机器学习的优秀课程,我会检查它是否仍在运行,如果是,请通过关键概念来了解机器学习的每个实现(如果这是有道理的)然后从那里更深入。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.