私は2つのタスクを実行しようとしています。入力は画像であり、入力に基づいて、一連の画像から別の画像を選択し(分類タスク)、両方の画像を使用して出力テンソルを取得します。明らかに、そのセットからどちらの画像を選択する必要があるかというグラウンドトゥルースがわかっていれば、両方のモデルを別々にトレーニングできます。しかし、私は出力テンソルのグラウンドトゥルースしか持っていません。
問題は、私が思うに、分類レイヤーを使用すると、勾配が微分可能でなくなることです。この問題にどのように対処しますか?この種のアーキテクチャをあらゆるアプリケーションに使用している文献はありますか?TIA
詳細:オブジェクト/シーンの複数の画像があり、ある種の再構成の問題にそれらの画像の2つを使用したいと思います。再構成のパフォーマンスを最大化するために、最初の画像が与えられた場合、2番目の画像を賢く選択したいと思います。たとえば、A、B、Cの3つの画像があり、ACを使用すると最良の結果が得られます。AがCを予測し、ACを使用して再構築を実現できるモデルが必要です。タスクは今明確ですか?ACがABよりも優れているというグラウンドトゥルースはありません。タスクは今明確ですか?
したがって、基本的には、分類タスクに続いて再構築タスクを実行する必要があります。
これが私が提案することです(私はこれを絶対的な最善の解決策のふりをしませんが、それは私がこの問題に取り組む方法です):
分類->再構築を1回の損失で実行する単一のタスクを作成できます。それでもこのネットワークを2つにnet_class
分けて、分類をnet_reconstruct
行う部分と再構築を行う部分を呼び出しましょう。分類ネットワークが予測するとします{'B': 0.1, 'C': 0.9)
。再構成に画像「C」のみを使用する代わりに、両方のペア(A-B
とA-C
)を2番目のネットワークにフィードして、再構成損失を計算しますL
(私は再構成の専門家ではありませんが、これにはいくつかの古典的な損失があると思います)。
したがって、2つの損失L(A-B)
とを計算しますL(A-C)
。私の総損失はです0.1 * L(A-B) + 0.9 L(A-C)
。このように、net_class
再構成の損失を最小化するペアリングを選択するようにトレーニングnet_reconstruct
し、両方の損失を最小化するようにトレーニングします。損失は継続的です(したがって、AIの専門家によると区別可能です;))。
この損失の背後にある考え方は3つあります。
1 -再構成を改善することが損失の両方があるため(ダウン行かせるL(A-B)
とL(A-C)
減少することになるので、この損失はあなたが望む何かに向けて、あなたの再構成の収束を行う必要があります。
2-あなたの再建者がかなり訓練されている(L(A-B)
そしてL(A-C)
比較的低い)と想像してみましょう。次に、分類器には、再構成の損失が最も少ないクラスを予測するインセンティブがあります。
3-これで、再構成子と分類器が同時にトレーニングされます。トレーニングの最後に、ほぼバイナリの結果(0.998対0.002など)を出力する分類器があることが期待できます。Aその時点で、再構築者は出力に関連付けられたシーンでのみトレーニングを行い0.998
ます。あなたの問題を正しく理解していれば、上位に分類されたシーンに対してのみ再構成部分を実行したいので、これは問題ではないはずです。
この方法は、再構成部分の深層学習を実行していない場合にも機能することに注意してください。
この種のトピックについてインスピレーションが必要な場合は、GAN(Generative Adversarial Networks)に関するブログ投稿を読むことをお勧めします。彼らは同じ2つの段階を使用します-1つの損失トリック(もちろん若干の違いはありますが、アイデアは非常に近いです)。
幸運を !
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加