問題タブ [gradienttape]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - model.trainable 変数で明示的な GradientTape を使用することと、model.fit はどのように異なりますか?
そのため、ニューラル ネットワークのトレーニング可能なパラメーターを最適化するために、Keras の Model.fit() と低レベルの TF GradientTape の両方を試してみたところ、Keras バージョンが大幅に優れていることがわかりました。
最終的な MSE が である Keras 最適化バージョンのコード:
ただし、次のコードに示すように、tf.GradientTape を使用して Keras モデルを最適化すると、次のようになります。
Keras フィット バージョンの値は、GradientTape を使用して取得した値よりも実際の値に近いことがわかります。また、Gradient Tape の値も、異なる入力に対してあまり変化せず、平均を回避しましたが、Keras の値はより多くの多様性を示しました。
では、GradientTape 低レベル API を使用して、Keras 高レベル API と同等のパフォーマンスを得るにはどうすればよいでしょうか? 私の実装よりもはるかに優れている Model.fit が行っていることは何ですか? ソースコードを調べてみましたが、本質的に特定できませんでした。
前もって感謝します。
tensorflow - TF Summit 2020 からの「Tensorflow で読むことを学ぶ」トークの実装 - Tensorflow 2.1/2.2 の EncoderDecoder Seq2Seq モデル - カスタム トレイン ステップ
背景情報
Tensorflow 2020 Summit で興味深いと思った講演ごとにGoogle Colabsを作成しています。注意として、Tensorflow 2.1 を使用しています。
'Learning To Read With Tensorflow'
トークを実装しようとしたときに問題が発生しました。
EncoderDecoder
クラス定義にたどり着くまでは、すべてが桃色です。Model
カスタムサブクラスにfit メソッドを実装すると、以下で詳しく説明するエラーが発生します。
最後の顕著なエラーはAttributeError: 'NoneType' object has no attribute 'dtype'
.
ただし、これはスコープ コード内の問題および/または(を含む)GradientTape
の定義の問題によるものだと思います。Decoder Layers
Attention Layers
メインコード
詳細なエラー メッセージ
data
レプリケートlines
する場合の変数の取得方法
データを取得する
データの前処理
参考文献前もって感謝します!!
tensorflow - ヤコビアンを計算するための tf.gradients() と比較したひどい tf.GradientTape パフォーマンス
以下の解決策:
シナリオ:
ユーザー定義関数のヤコビアンをループで何度も計算しようとしています。TF 2 の GradientTape と、古いセッション ベースの tf.gradients() メソッドでこれを行うことができます。問題は、GradientTape が tf.gradients() よりも非常に遅い (100 倍遅い) ことです。使いたい機能 (bath_jacobian、ヘッセ行列のサポートなど) がありますが、100 倍遅い場合は使用できません。
質問:
私が単にGradientTapeを誤用しているのか、それとも呼び出されるたびに提供された関数を再微分する必要があるため常に遅くなるのかは明らかではありません(私の疑い)。GradientTape の使用を修正するためのヒント、または常に tf.gradients よりも桁違いに基本的に遅くなるという確認を求めています。
関連する質問:
- 複数のヤコビアン計算に対する GradientTape の繰り返し使用- 同じシナリオ、未回答
- `GradientTape` は導関数の各評価を再微分する必要がありますか? - 同じシナリオ、未回答
- グローバル コンテキストで 1 つの GradientTape を使用する- 緩やかに関連し、そのソリューションを私のシナリオに適用するのに問題がある
GradientTape と tf.gradients() を比較するための完全に含まれる最小限の例:
編集 - 解決策:
xdurch0 は、@tf.function で _useGradientTape() をラップする必要があることを以下に指摘しました。これは、他の理由で以前に失敗したものです。これを行ったら、xTensor の定義を @tf.function ラッパーの外に移動する必要がありました。それには、メンバー変数を作成し、tf.assign() を使用します。
これがすべて完了すると、GradientTape (この単純な例の場合) が tf.gradints と同じ大きさになっていることがわかります。十分な試行 (~1E5) を実行すると、tf.gradients の 2 倍の速度になります。驚くばかり!
python - テンソルフロー勾配テープを使用したメモリ不足の OOM ですが、リストを追加した場合にのみ発生します
私は CNN を使用してデータセット (1000,3253) に取り組んできました。勾配テープを使用して勾配計算を実行していますが、メモリが不足し続けています。それでも、勾配計算をリストに追加する行を削除すると、スクリプトはすべてのエポックを実行します。なぜこれが起こるのか完全にはわかりませんが、テンソルフローとグラデーションテープの使用も初めてです。アドバイスやご意見をいただければ幸いです