複数の出力層を持つネットワークをトレーニングしたいと考えています。
in->hidden->out 1
->out 2
これは可能ですか?もしそうなら、トレーニングを達成するためにデータセットとトレーナーをセットアップするにはどうすればよいですか。
複数の出力層を持つネットワークをトレーニングしたいと考えています。
in->hidden->out 1
->out 2
これは可能ですか?もしそうなら、トレーニングを達成するためにデータセットとトレーナーをセットアップするにはどうすればよいですか。
複数の SoftMax 領域を持つために出力を分割することを検討しているため、PartialSoftmaxLayer
PyBrain が提供するものを使用できます。
同じ長さのスライスに制限されていることに注意してください。ただし、カスタム出力レイヤーが必要な場合は、そのコードが参考になります。
https://github.com/pybrain/pybrain/blob/master/pybrain/structure/modules/softmax.py
いいえ。このように、複数の非表示レイヤーを使用できます
イン -> 非表示 1 -> 非表示 2 -> アウト
または、複数の出力ニューロンを (単一の出力層に) 持つこともできます。
技術的には、ニューロンとレイヤーの任意の配置を設定し、それらを好きなように接続し、好きなように呼び出すことができますが、上記が一般的な方法です。
プログラマーとしてはより多くの作業が必要になりますが、2 つの異なる出力が必要な場合は、いつでも出力を 1 つのベクトルに連結し、それをネットワークの出力として使用できます。
in --> hidden --> concatenate([out1, out2])
このアプローチの重大な欠点として考えられるのは、2 つの出力のスケールが異なる場合、ネットワークのトレーニングに使用するエラー メトリックが連結によって歪められることです。
ただし、2 つの別個の出力を使用できたとしても、おそらく使用する 2 つのエラー メトリックに何らかの重みを付けて、この問題を解決する必要があります。
この問題の潜在的な解決策には、カスタム エラー メトリックの定義 (たとえば、加重二乗誤差または加重クロス エントロピーのバリアントを使用することによる) および/または 2 つの出力データセットを標準化して、それらが共通のスケールに存在するようにすることが含まれます。