私はPythonでカスタム損失を伴うKerasを使用してニューラルネットを構築しようとしています。最後のレイヤーで活性化関数としてシグモイド関数を持ち、カスタム損失の始めにシグモイドを持つかどうかは同じですかない。だからここに私はそれによって何を意味するかです:シグモイド関数の場所はニューラルネットワークで重要ですか?
私は2番目のモデルでは損失が計算されていることを感じを持っていますが、それはバックその間それが最初のモデルでS状結腸を介して伝播されていません。そうですか?
私はPythonでカスタム損失を伴うKerasを使用してニューラルネットを構築しようとしています。最後のレイヤーで活性化関数としてシグモイド関数を持ち、カスタム損失の始めにシグモイドを持つかどうかは同じですかない。だからここに私はそれによって何を意味するかです:シグモイド関数の場所はニューラルネットワークで重要ですか?
私は2番目のモデルでは損失が計算されていることを感じを持っていますが、それはバックその間それが最初のモデルでS状結腸を介して伝播されていません。そうですか?
実際、第2の場合、逆伝播はシグモイドを通らない。損失関数の内部でデータを変更することは本当に悪いことです。
これが悪い理由は、ネットワーク上で実際に発生しているエラーではなく、出力にエラーをバックプロパゲーションするためです。単純なケースで自分自身を説明する
: あなたはバイナリ形式でラベルを持っているが、あなたのシグモイドカスタム損失関数内にある場合テンソルは[0, 0, 1, 0]
、あなたの損失のシグモイド変換されます。この[-100, 0, 20, 100],
のように見えるの出力を持っているかもしれないと言いますこれはほぼtihのようなものになります。[0, 0.5, 1, 1]
逆伝播されるエラーは、[0, -0.5, 0, -1]
になります。バックプロパゲーションはではなく、を考慮に入れて、このエラーを直接出力に適用します。誤差の大きさは、出力の誤差の大きさを反映していないことがわかります。最後の値は100で、負の領域でなければなりませんが、モデルはその層に小さな誤差-1をバックプロパゲーションします。
要約すると、バックプロパゲーションがエラーをバックプロパゲーティングする際に考慮に入れるように、シグモイドはネットワーク内に存在する必要があります。
素晴らしい!あなたの答えをありがとう、本当にありがとう – DalekSupreme
あなたが使用しているコードを提供してもらえますか?これは実際には面白いです。 –