この Paperに導入された「ガイド付きバックプロパゲーション」のテクニックをTensorFlowに実装したいと考えています。これは recipeに記載されています。TensorFlowのガイド付きバックプロパゲーション
これは、たとえば入力wrtのグラジエントを計算するときに計算されることを意味します。 NNの出力は、すべてのRELUユニットで計算されたグラジエントをに変更する必要があります。具体的には、これらのユニット上の逆伝播された信号は、この技法を働かせるために、ゼロで閾値処理されなければならない。換言すれば、負であるRELUの偏導関数は無視されなければならない。
これらの勾配計算をのテスト例にのみ適用したいと考えている、つまりモデルのパラメータを更新したくないのですが、どうすればよいですか?
私がこれまでに(失敗した)二つのことを試してみました:
を使用 tf.py_funcそれはグラム経由勾配操作だ再定義する資格があるRELU、私の簡単なnumpyのバージョンをラップします.gradient_override_mapコンテキストマネージャ。
BackPropの前後の値を集め、Relusからのものにしきい値を適用します。
現在のところ私が持っていないTFの内部についての知識が必要なので、両方の方法で失敗しました。
誰か他のルートを示唆したり、コードをスケッチしたりできますか?
ありがとうございます。
こんにちはKaveman、感謝のために多くの迅速な返信。あなたの最後のtf.gradientsコールでは、最初の引数としてDafter_reluを意図的に渡していますか? – Peter
また、私はまだ混乱しているwrtです。 RELU要素を持つ任意のNNで動作する方法で、多くのレイヤーを持つネットワーク上でこれを一般化する方法。この部分では、各RELU要素の入出力をすべてトレースする必要はなく、以前に説明したロジックを '連鎖'する必要はありませんか?ありがとう。 – Peter
@Peter、申し訳ありませんが、それはタイプミスでした。 'tf.gradients'への2回目の呼び出しは' after_relu' w.r.tです。 'params'。 – keveman