いくつかの反復でレイヤーの重みをフリーズする方法は?

エミリオ・ボテロ

私は2つのMLPを一緒にトレーニングしようとしています。それぞれが、異なる実数値変数を予測します。これらの2つの出力での損失を最小限に抑えたいのですが、いくつかの「ウォームアップ」反復のためにそのうちの1つを修正したいと思います。

私はテンソルフローに不慣れですが、基本的にはPytorchで次のようなものを探しています。

def loss(self, *args, **kwargs) -> torch.Tensor:
        # Extract data
        data, target, probability = args

        # Iterate through each model and sum nll
        nll = []
        for index in range(self.num_models):
            # Extract mean and variance from prediction
            if self._current_it < self.warm_start_it:
                predictive_mean = self.mean[index](data)
                with torch.no_grad():
                    predictive_variance = softplus(self.variance[index](data))
            else:
                with torch.no_grad():
                    predictive_mean = self.mean[index](data)
                predictive_variance = softplus(self.variance[index](data))

            # Calculate the loss
            nll.append(self.calculate_nll(target, predictive_mean, predictive_variance))

        mean_nll = torch.stack(nll).mean()

        # Update current iteration
        if self.training:
            self._current_it += 1

        return mean_nll

モデルのcall()関数内で同様のことができると思います。つまり、次のようになります。

    def call(self, step, inputs, training=None, mask=None):

        if step < self.warmup:
            with tf.GradientTape() as t:
                mean_predictions = self.mean(inputs)
            var_predictions = self.variance(inputs)
        else:
            mean_predictions = self.mean(inputs)
            with tf.GradientTape() as t:
                var_predictions = self.variance(inputs)
        return mean_predictions, var_predictions

これは、上記のPytorchと同等のものを取得する正しい方法ですか?

エミリオ・ボテロ

私は次のことをすることになりました:

メインループでは、

mlp = UncertaintyMLP(805, 1)
    loss_fn = GaussianNLL()
    optimizer = tf.keras.optimizers.Adam(learning_rate=1e-3)
    epochs = 1000
    for epoch in range(epochs):
        for step, (x_batch, y_batch) in enumerate(train_dataset):

            if epoch > mlp.warmup:
                for layer in mlp.mean.layers:
                    layer.trainable = False
                for layer in mlp.variance.layers:
                    layer.trainable = True
            with tf.GradientTape() as tape:
                output = mlp(step, x_batch)
                loss = loss_fn(y_batch, output)
            grads = tape.gradient(loss, mlp.trainable_weights)
            optimizer.apply_gradients(zip(grads, mlp.trainable_weights))

およびモデルクラス:

def call(self, step, inputs, training=None, mask=None):
    mean_predictions = self.mean(inputs)
    var_predictions = tf.math.softplus(self.variance(inputs)
    return mean_predictions, var_predictions

ただし、TensorflowがPytorchに相当するものがある場合は、それが何であるかを知りたいと思っていtorch.no_grad()ます。

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

MLPの出力レイヤーのデフォルトの重みはいくつですか?

分類Dev

サイズの異なる2つのデータフレームを反復処理するにはどうすればよいですか?

分類Dev

resnet50を微調整するときにいくつかのレイヤーをフリーズする方法

分類Dev

リストを調べて、条件付きでいくつかのフレーズをマージする方法は?

分類Dev

TensorFlowで個々のレイヤーの重み減衰を定義する方法は?

分類Dev

構成ファイルの畳み込みレイヤーの後の出力サイズを計算するにはどうすればよいですか?

分類Dev

ケラスのConv2Dからレイヤーの重みを正しく取得するにはどうすればよいですか?

分類Dev

1つのサイファークエリでいくつかの関係から重みを抽出します

分類Dev

Resnet50で特定のレイヤーまたはステージをフリーズする方法は?

分類Dev

if条件に基づいてforループでいくつかの反復をスキップする方法は?

分類Dev

クイックソートアルゴリズムのインプレースクラッシュは、いくつかの反復後に発生します

分類Dev

r:フレーズを検出するために、いくつかの列のすべての要素を反復処理します

分類Dev

Ansible:複数のファイルで文字列の置換を行うためにいくつかのキー/値を反復処理する方法

分類Dev

Kerasで入力サイズの異なる2つのLSTMレイヤーを組み合わせる方法は?

分類Dev

Keras APIを使用して「入力レイヤーから非表示レイヤーへ」および「非表示レイヤーから出力レイヤーへ」の重みを抽出するにはどうすればよいですか?

分類Dev

Tensorflow Object Detection APIで畳み込みレイヤーの重みを初期化する方法は?

分類Dev

Kerasに基づくLSTMモデルのすべてのエポックで1つのレイヤーの重み行列を取得するにはどうすればよいですか?

分類Dev

いくつかの可能なイテレータの1つを条件付きで反復します

分類Dev

配列値でスタイルレイヤーの重みを更新する方法

分類Dev

Jetson TX2でnvidiaのチュートリアルコードを実行しようとすると、レイヤーの重みがnullになり、TRTがキャッシュを見つけられないのはなぜですか?

分類Dev

バイナリファイルを読み取るときの最大サイズはいくつですか?

分類Dev

TensorFlowで固定の重みでレイヤーを構築する

分類Dev

Kerasレイヤーの重みをリセットする

分類Dev

Rで2つの等しくないサイズのデータフレームをマージする方法

分類Dev

pygameでイベントをフレーム(反復)ごとに1つのイベントに制限するにはどうすればよいですか?

分類Dev

Linuxの名前でいくつかのディレクトリのファイルをソートする方法

分類Dev

ボトルネック機能から高密度レイヤーをトレーニングするか、最後のレイヤーを除くすべてのレイヤーをフリーズするかは同じである必要がありますが、動作が異なります

分類Dev

リーフレット:ポリゴン内にのみレイヤーを表示するにはどうすればよいですか?

分類Dev

データフレームを反復処理しているときに、新しく見つかった値を同じインデックスの新しい列に配置するにはどうすればよいですか?

Related 関連記事

  1. 1

    MLPの出力レイヤーのデフォルトの重みはいくつですか?

  2. 2

    サイズの異なる2つのデータフレームを反復処理するにはどうすればよいですか?

  3. 3

    resnet50を微調整するときにいくつかのレイヤーをフリーズする方法

  4. 4

    リストを調べて、条件付きでいくつかのフレーズをマージする方法は?

  5. 5

    TensorFlowで個々のレイヤーの重み減衰を定義する方法は?

  6. 6

    構成ファイルの畳み込みレイヤーの後の出力サイズを計算するにはどうすればよいですか?

  7. 7

    ケラスのConv2Dからレイヤーの重みを正しく取得するにはどうすればよいですか?

  8. 8

    1つのサイファークエリでいくつかの関係から重みを抽出します

  9. 9

    Resnet50で特定のレイヤーまたはステージをフリーズする方法は?

  10. 10

    if条件に基づいてforループでいくつかの反復をスキップする方法は?

  11. 11

    クイックソートアルゴリズムのインプレースクラッシュは、いくつかの反復後に発生します

  12. 12

    r:フレーズを検出するために、いくつかの列のすべての要素を反復処理します

  13. 13

    Ansible:複数のファイルで文字列の置換を行うためにいくつかのキー/値を反復処理する方法

  14. 14

    Kerasで入力サイズの異なる2つのLSTMレイヤーを組み合わせる方法は?

  15. 15

    Keras APIを使用して「入力レイヤーから非表示レイヤーへ」および「非表示レイヤーから出力レイヤーへ」の重みを抽出するにはどうすればよいですか?

  16. 16

    Tensorflow Object Detection APIで畳み込みレイヤーの重みを初期化する方法は?

  17. 17

    Kerasに基づくLSTMモデルのすべてのエポックで1つのレイヤーの重み行列を取得するにはどうすればよいですか?

  18. 18

    いくつかの可能なイテレータの1つを条件付きで反復します

  19. 19

    配列値でスタイルレイヤーの重みを更新する方法

  20. 20

    Jetson TX2でnvidiaのチュートリアルコードを実行しようとすると、レイヤーの重みがnullになり、TRTがキャッシュを見つけられないのはなぜですか?

  21. 21

    バイナリファイルを読み取るときの最大サイズはいくつですか?

  22. 22

    TensorFlowで固定の重みでレイヤーを構築する

  23. 23

    Kerasレイヤーの重みをリセットする

  24. 24

    Rで2つの等しくないサイズのデータフレームをマージする方法

  25. 25

    pygameでイベントをフレーム(反復)ごとに1つのイベントに制限するにはどうすればよいですか?

  26. 26

    Linuxの名前でいくつかのディレクトリのファイルをソートする方法

  27. 27

    ボトルネック機能から高密度レイヤーをトレーニングするか、最後のレイヤーを除くすべてのレイヤーをフリーズするかは同じである必要がありますが、動作が異なります

  28. 28

    リーフレット:ポリゴン内にのみレイヤーを表示するにはどうすればよいですか?

  29. 29

    データフレームを反復処理しているときに、新しく見つかった値を同じインデックスの新しい列に配置するにはどうすればよいですか?

ホットタグ

アーカイブ