Pythonでのfmincgの実装


8

私はPythonでニューラルネットワークを再実装しようとしています。コスト関数と逆伝播アルゴリズムを正しく実装しました。Octaveに相当するコードを実行して、それらをチェックしました。

しかし、scipy.optimize.fmin_cg関数を使用しようとすると、反復の実行に非常に長い時間がかかります。警告が表示されて終了し、「目的のエラー率が達成されなかった」というエラーが表示されます。

Octaveの同じプログラムは問題なく実行されます。ただし、独自のfmincg機能が定義されています。

何が悪いのですか?


みんな、エラーが発生しました。「カーネルが予期せず終了したようです。」どこで間違ったか、ベクトル化された計算にfmin_cgを使用するために他に必要なことはありますか?
Wei Gao

対称性の破れを回避するには、paramsを次のように初期化する必要があります。params = numpy.random.randn(dims)* 0.01
Shivam Singh

回答:


6

今後のヒントとして、二重疑問符を使用しますか?関数のソースをプルするには:

scipyソースを見ると、内部パラメーターalpha_kがゼロまたはNoneの場合、このエラーメッセージが表示されます。

この値は、内部のWolfe Line検索アルゴリズムに関連付けられています。特に、検索が検索軌道に沿ってより良い値を見つけられない場合に呼び出されます。関数のどこかに線形オプティマがあり、オプティマイザが陥り混乱する可能性があります。

おそらく、コールバックを追加して、失敗した検索が生成される場所を確認してください。


これのフォローアップとして、scipyは最適化するベクトルのサイズに基づいて最大反復回数を選択します。これは平均的な推測よりも優れていますが、より明確に文書化する必要があります。
meawoppl 2014年

2

fprimeパラメータを指定しなかったと思います。このパラメーターを指定しない場合fmin_cg、独自のソリューションを特定する必要があります。通常、提供されている最適なソリューションよりもはるかに遅いものです。コードは次のようになります。

theta = fmin_cg(compute_cost_reg, fprime=compute_gradient_reg,
                x0=theta, args=(X, y, lambd), maxiter=50)

0

私はこれが古い質問であることを知っていますが、私は同様の問題に苦労しており、他の誰かがこれに遭遇した場合に備えて私の解決策を投稿すると思いました。

Θ

これを実行fmin_cgした後、私はf fprime を使用して実行しましたが、それでもまだゆっくり実行されていましたが、それまでに発生していたエラーや警告は発生しませんでした。

実際、コスト関数を最小化する作業は、MATLABの実装よりも優れていmax_iters = 100ます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.