3

コスト関数を持ち、バックプロパゲーションによってその勾配を決定するニューラル ネットワーク オブジェクトを Python で作成しました。ここにはたくさんの最適化関数がありますが、それらを実装する方法がわかりません。また、学習するサンプルコードを見つけるのに苦労しています。

明らかに、変更しようとしているパラメーター、最小化しようとしているコスト関数、および backprop によって計算された勾配を何らかの方法で伝える必要があります。たとえば、fmin_cg に何が何であるかを伝えるにはどうすればよいでしょうか。

おまけの質問: さまざまなアルゴリズムの使用方法の違いについてどこで学べますか?

===== OK、アップデート =====

これは私が持っているものです:

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

……半!

4

2 に答える 2

1

fmin_cg を使用したことはありません。v は重みベクトルだと思います。ドキュメントを読んだときに、コードにエラーは見つかりませんでした。しかし、私はあなたのエラーを検索し、これを見つけました:行列が整列していません エラー: Python SciPy fmin_bfgs

また、c(v) の後に必ず g(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 が述べたように、コスト関数と勾配をタプルとして返す 1 つの関数を渡すだけで、2 つの前方伝播を回避できます。

人工ニューラル ネットワークの最適化アルゴリズムに関する優れた記事は次のとおりです。

Levenberg-Marquardt をお勧めします。このアルゴリズムは非常にうまく機能します。残念ながら、すべての反復ステップには三次複雑度 O(n^3) があります。

于 2012-07-07T08:44:53.837 に答える
0

おまけの質問に答えるだけです。Coursera には機械学習に関する素晴らしいクラスがありました。私はそれをチェックして、それがまだ稼働しているかどうかを確認し、稼働している場合は、主要な概念を調べて、機械学習の各実装の感触をつかみます (それは理にかなっています) そして、そこからさらに深く掘り下げます。

于 2012-07-06T22:55:28.970 に答える