ケラスのバックプロパゲーションでレイヤーをスキップする

DalekSupreme

TensorflowバックエンドでKerasを使用していますが、バックプロパゲーション中にレイヤーをスキップして、フォワードパスで実行できるかどうか知りたいです。だからここに私が意味するものがあります

Lambda (lambda x: a(x))

フォワードパスで申請aたいのですがx、バックプロパゲーションが行われるときに派生に含まれたくありません。

私は何も見つからなかった解決策を見つけようとしていました。誰かがここで私を助けてくれますか?

jdehesa

更新2

に加えてtf.py_funcカスタム操作を追加する方法に関する公式ガイドがあります


更新

何も再構築せずに純粋にPythonでグラデーションを使用してカスタム操作を作成する例については、この質問参照してくださいメソッドにはいくつかの制限があることに注意してください(のドキュメントを参照tf.py_func)。


問題の正確な解決策ではありませんが、それでも一種の答えであり、コメントするには長すぎます。

これはKerasの問題ではなく、TensorFlowの問題です。各操作は、バックプロパゲーション中に使用される独自の勾配計算を定義します。私は本当にそのようなことをしたかったのですが、TensorFlowにopを自分で実装し(簡単なことではありません)、必要なグラデーションを定義する必要があります-「グラデーションなし」にすることはできないため、1または0(それ以外の場合はバックプロパゲーションを続行できません)。tf.NoGradientTensorFlowには、opにゼロを伝播させる関数がありますが、TensorFlow自体の内部から使用することを意図しているとは思いません。

更新

さて、もう少しコンテキストがあります。TensorFlowグラフはカーネルによって実装されるopsで構成されていますこれは基本的に1対1のマッピングですが、たとえば、操作用のCPUとGPUカーネルが存在する場合があるため、差別化されます。TensorFlowでサポートされるopsのセットは通常静的です。つまり、新しいバージョンで変更される可能性がありますが、グラフのopsはProtobufシリアル化形式になるため、原則として独自のopsを追加することはできません。したがって、独自のopsを作成した場合そうすると、グラフを共有できなくなります。次に、OpsはマクロREGISTER_OP(たとえばここを参照)を使用してC ++レベルで定義され、カーネルはREGISTER_KERNEL_BUILDER(たとえばここを参照使用して定義されます。

さて、グラデーションはどこで機能しますか?面白いことに、opの勾配はC ++レベルで定義されていません。そこにある他のOPSの勾配を実装OPS(およびカーネル)は、(あなたが以前のファイルを見ればあなたがで終わる名前のOPS /カーネルを見つけることができますGradこれらは明示的ではありません(これまで私が承知しているとされる))が、このレベルで「リンク」されています。opsとそのグラデーションの間の関連付けは、Pythonで定義されているようです。通常は、tf.RegisterGradientまたは前述の方法で定義されtf.NoGradientます(たとえば、ここを参照してください。で始まるPythonモジュールgen_は、C ++マクロを使用て自動生成されます)。これらの登録は、グラフの勾配を計算する方法についてバックプロパゲーションアルゴリズムに通知します。

それで、実際にこれを解決する方法は?さて、フォワードパスに必要な計算を実装する対応するカーネルを使用して、C ++で少なくとも1つのopを作成する必要があります。次に、使用する勾配計算を既存のTensorFlow ops(最も可能性が高い)で表現できる場合はtf.RegisterGradient、Pythonを呼び出して、そこで「標準」のTensorFlowで計算を行う必要がありますこれは非常に複雑ですが、良いニュースはそれが可能であり、さえありますそのため(彼らはその中の勾配登録部分をちょっと忘れたと思いますが)!ご覧のとおり、このプロセスでは、新しいオペコードをライブラリにコンパイルし(Windowsで機能するかどうかはわかりません)、Pythonからロードします(明らかに、これには手動コンパイルの面倒なプロセスが含まれます)。TensorFlowのBazel)。おそらくより現実的な例は、TensorFlow Foldにあります。これはを呼び出すマクロを介してここで1つのカスタム操作を(1つの時点で)登録する構造化データ用のTensorFlowの拡張であり、Pythonではライブラリをロードしてそのグラデーションを登録しますここにREGISTER_OPここ定義さている独自の登録関数を使用して、tf.NotDifferentiable(の別名tf.NoGradient)を呼び出すだけです。

tldr:それはかなり難しいですが、それは可能であり、そこにはいくつかの例さえあります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

バックプロパゲーションフェーズ中に最後の数レイヤーをスキップすることは可能ですか?

分類Dev

バックプロパゲーションで前のレイヤーの重みを更新する

分類Dev

pytorchでのバックプロパゲーション中にカスタムレイヤーパラメーターを自動更新

分類Dev

ケラスの特定のレイヤーを介してグラデーションバックプロップを停止する

分類Dev

ナビゲーションバーの光沢のあるレイアウトでブーストラップフッタークラスを使用する

分類Dev

サーバークライアントアプリケーションでフラックスアーキテクチャパターンを使用する

分類Dev

バックプロパゲーションのスケーリング

分類Dev

カスタムLambdaレイヤーはKerasのバックプロパゲーションに含まれますか

分類Dev

VLCプレーヤー:障害のあるプレイリストアイテムを無視します(「メイン入力エラー:入力を開くことができません」はアプリケーションをロックします)

分類Dev

アプリケーションをパブリックIPアドレスでバインドする

分類Dev

フラッター:Googleマップでロケーションレイヤーを表示する方法

分類Dev

マルチスレッドアプリケーションでのオプションのデバッグ出力-つまり、デッドロックやバグを把握するためではなく、*クライアント用*を意味します。

分類Dev

ニューラルネットワークのコンテキストでのプロジェクションレイヤーとは何ですか?

分類Dev

ニューラルネットワークのコンテキストでのプロジェクションレイヤーとは何ですか?

分類Dev

ニューラルネットワークのコンテキストでのプロジェクションレイヤーとは何ですか?

分類Dev

ケラスのバリエーションドロップアウトLSTMレイヤーでMCドロップアウトを使用するにはどうすればよいですか?

分類Dev

バックプロパゲーション以外のニューラルネットワークをトレーニングする方法が必要です

分類Dev

ニューラルネットワークでは、バイアス項の重みはバックプロパゲーションで更新されますか?

分類Dev

角度2アプリケーションのバックグラウンド/セパレートスレッドで関数を実行する

分類Dev

トリプレットロスバックプロパゲーション勾配式とは何ですか?

分類Dev

クラシック asp でアプリケーションのデバイスを決定する

分類Dev

末尾のスラッシュなしで/ contextPathを要求すると、リバースプロキシの背後にTomcatが埋め込まれたSpring Bootアプリケーションがhttpsにリダイレクトしない

分類Dev

バッチファイルを使用してタスクスケジューラの開始(オプション)プロパティを設定する方法

分類Dev

キュウリ接着剤オプションパッケージで複数のクラスを使用する

分類Dev

フュージョンテーブルレイヤーのキャッシュをバイパスする

分類Dev

キーボードを使用すると、Androidアプリケーションが実際のデバイスでクラッシュする

分類Dev

リフレクション:基本クラスで派生プロパティゲッターを呼び出す

分類Dev

アプリケーションのクライアントがクラス/パッケージを簡単に拡張できるように、フレームワークでクラス/パッケージをよりよく整理する方法は?

分類Dev

ブートストラップ4ドロップダウンナビゲーションバーは、プラスとマイナスのFontawesome5でキャレットを変更します

Related 関連記事

  1. 1

    バックプロパゲーションフェーズ中に最後の数レイヤーをスキップすることは可能ですか?

  2. 2

    バックプロパゲーションで前のレイヤーの重みを更新する

  3. 3

    pytorchでのバックプロパゲーション中にカスタムレイヤーパラメーターを自動更新

  4. 4

    ケラスの特定のレイヤーを介してグラデーションバックプロップを停止する

  5. 5

    ナビゲーションバーの光沢のあるレイアウトでブーストラップフッタークラスを使用する

  6. 6

    サーバークライアントアプリケーションでフラックスアーキテクチャパターンを使用する

  7. 7

    バックプロパゲーションのスケーリング

  8. 8

    カスタムLambdaレイヤーはKerasのバックプロパゲーションに含まれますか

  9. 9

    VLCプレーヤー:障害のあるプレイリストアイテムを無視します(「メイン入力エラー:入力を開くことができません」はアプリケーションをロックします)

  10. 10

    アプリケーションをパブリックIPアドレスでバインドする

  11. 11

    フラッター:Googleマップでロケーションレイヤーを表示する方法

  12. 12

    マルチスレッドアプリケーションでのオプションのデバッグ出力-つまり、デッドロックやバグを把握するためではなく、*クライアント用*を意味します。

  13. 13

    ニューラルネットワークのコンテキストでのプロジェクションレイヤーとは何ですか?

  14. 14

    ニューラルネットワークのコンテキストでのプロジェクションレイヤーとは何ですか?

  15. 15

    ニューラルネットワークのコンテキストでのプロジェクションレイヤーとは何ですか?

  16. 16

    ケラスのバリエーションドロップアウトLSTMレイヤーでMCドロップアウトを使用するにはどうすればよいですか?

  17. 17

    バックプロパゲーション以外のニューラルネットワークをトレーニングする方法が必要です

  18. 18

    ニューラルネットワークでは、バイアス項の重みはバックプロパゲーションで更新されますか?

  19. 19

    角度2アプリケーションのバックグラウンド/セパレートスレッドで関数を実行する

  20. 20

    トリプレットロスバックプロパゲーション勾配式とは何ですか?

  21. 21

    クラシック asp でアプリケーションのデバイスを決定する

  22. 22

    末尾のスラッシュなしで/ contextPathを要求すると、リバースプロキシの背後にTomcatが埋め込まれたSpring Bootアプリケーションがhttpsにリダイレクトしない

  23. 23

    バッチファイルを使用してタスクスケジューラの開始(オプション)プロパティを設定する方法

  24. 24

    キュウリ接着剤オプションパッケージで複数のクラスを使用する

  25. 25

    フュージョンテーブルレイヤーのキャッシュをバイパスする

  26. 26

    キーボードを使用すると、Androidアプリケーションが実際のデバイスでクラッシュする

  27. 27

    リフレクション:基本クラスで派生プロパティゲッターを呼び出す

  28. 28

    アプリケーションのクライアントがクラス/パッケージを簡単に拡張できるように、フレームワークでクラス/パッケージをよりよく整理する方法は?

  29. 29

    ブートストラップ4ドロップダウンナビゲーションバーは、プラスとマイナスのFontawesome5でキャレットを変更します

ホットタグ

アーカイブ