【问题标题】:Scipy optimization algorithms? (for minimizing neural network cost function) - pythonScipy优化算法? (用于最小化神经网络成本函数) - python
【发布时间】:2012-07-07 09:36:04
【问题描述】:

我在 python 中编写了一个神经网络对象,它具有成本函数并通过反向传播确定其梯度。我看到一堆优化函数here,但我不知道如何实现它们。我也很难找到任何示例代码来学习。

显然,我需要以某种方式告诉它我要更改哪些参数,我要最小化的成本函数,然后是反向传播计算的梯度。我怎么知道 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

...暂停!

【问题讨论】:

    标签: python scipy neural-network


    【解决方案1】:

    我从未使用过 fmin_cg。我猜 v 是你的权重向量。当我阅读documentation 时,我没有在您的代码中发现错误。但我搜索了你的错误,发现了这个:matrices are not aligned Error: 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)。

    【讨论】:

    • 这真是成本低效,为什么要执行两次前向传播?在 matlab 的 fmin_cg 中,只需要一个函数将代价和梯度都作为元组返回。
    【解决方案2】:

    仅解决额外问题:Coursera 有一堂很棒的机器学习课程,我会检查一下它是否还在,如果还在,请浏览关键概念以了解机器的每个实现学习(如果有意义的话),然后从那里更深入。

    【讨论】:

    • 我上周刚上完课 :) 不幸的是,他没有详细介绍优化算法。不过课程很棒。
    • 我知道...这就是为什么我只解决了奖金问题 xP 抱歉,伙计
    猜你喜欢
    • 2014-02-03
    • 2020-02-29
    • 1970-01-01
    • 2021-05-20
    • 2018-11-18
    • 2016-07-27
    • 2010-10-24
    • 1970-01-01
    • 2012-12-29
    相关资源
    最近更新 更多