保存されたモデルをベースラインのMlpPolicyをトレーニングするための開始点として使用できませんか?

pipsqueaker117

私は現在、OpenAIベースラインのコードを使用してモデルをトレーニングしており、次のコードを使用していますtrain.py

from baselines.common import tf_util as U
import tensorflow as tf
import gym, logging

from visak_dartdeepmimic import VisakDartDeepMimicArgParse

def train(env, initial_params_path,
        save_interval, out_prefix, num_timesteps, num_cpus):
    from baselines.ppo1 import mlp_policy, pposgd_simple
    sess = U.make_session(num_cpu=num_cpus).__enter__()

    U.initialize()

    def policy_fn(name, ob_space, ac_space):
        print("Policy with name: ", name)
        policy = mlp_policy.MlpPolicy(name=name, ob_space=ob_space, ac_space=ac_space,
            hid_size=64, num_hid_layers=2)
        saver = tf.train.Saver()
        if initial_params_path is not None:
            print("Tried to restore from ", initial_params_path)
            saver.restore(tf.get_default_session(), initial_params_path)
        return policy

    def callback_fn(local_vars, global_vars):
        iters = local_vars["iters_so_far"]
        saver = tf.train.Saver()
        if iters % save_interval == 0:
            saver.save(sess, out_prefix + str(iters))

    pposgd_simple.learn(env, policy_fn,
            max_timesteps=num_timesteps,
            callback=callback_fn,
            timesteps_per_actorbatch=2048,
            clip_param=0.2, entcoeff=0.0,
            optim_epochs=10, optim_stepsize=3e-4, optim_batchsize=64,
            gamma=1.0, lam=0.95, schedule='linear',
        )
    env.close()

これは、OpenAI自体がベースラインリポジトリで提供するコードに基づいています

これは問題なく機能しますが、learn関数に渡されたハイパーパラメータが原因で、パフォーマンスが低下したり、状況が進むにつれて分散が大きくなったりするため、かなり奇妙な学習曲線が得られると思われます(確かにはわかりませんが)。

ここに画像の説明を入力してください

とにかく、この仮説を確認するために、モデルを最初から再トレーニングするのではなく、最初からやり直したいと思います。たとえば、保存されたモデルが横になっている反復1600(で保存した)から始めたいと思います。saver.savecallback_fn

そこで、今度はtrain関数を呼び出しますが、今回inital_params_pathは反復1600の保存プレフィックスを指すようにします。私の理解では、saver.restoreinpolicy_fn呼び出すと、モデルが1teration 1600にあった場所に「リセット」されるはずです(そして私はprintステートメントを使用してロードルーチンが実行されることを確認しました)

しかし、実際には、何もロードされていないようなものだと思います。たとえば、次のような統計を取得した場合

----------------------------------
| EpLenMean       | 74.2         |
| EpRewMean       | 38.7         |
| EpThisIter      | 209          |
| EpisodesSoFar   | 662438       |
| TimeElapsed     | 2.15e+04     |
| TimestepsSoFar  | 26230266     |
| ev_tdlam_before | 0.95         |
| loss_ent        | 2.7640965    |
| loss_kl         | 0.09064759   |
| loss_pol_entpen | 0.0          |
| loss_pol_surr   | -0.048767302 |
| loss_vf_loss    | 3.8620138    |
----------------------------------

反復1600の場合、次に新しい試行の反復1(表面上は1600のパラメーターを開始点として使用)の場合、次のようになります。

----------------------------------
| EpLenMean       | 2.12         |
| EpRewMean       | 0.486        |
| EpThisIter      | 7676         |
| EpisodesSoFar   | 7676         |
| TimeElapsed     | 12.3         |
| TimestepsSoFar  | 16381        |
| ev_tdlam_before | -4.47        |
| loss_ent        | 45.355236    |
| loss_kl         | 0.016298374  |
| loss_pol_entpen | 0.0          |
| loss_pol_surr   | -0.039200217 |
| loss_vf_loss    | 0.043219414  |
----------------------------------

これは正方形に戻ります(これは私のモデルが最初からトレーニングされた場所です)

面白いのは、実際にモデルを使用して再生できるので、少なくともモデルが適切に保存されていることを知っていることです。 eval.py

from baselines.common import tf_util as U
from baselines.ppo1 import mlp_policy, pposgd_simple
import numpy as np
import tensorflow as tf

class PolicyLoaderAgent(object):
    """The world's simplest agent!"""
    def __init__(self, param_path, obs_space, action_space):
        self.action_space = action_space

        self.actor = mlp_policy.MlpPolicy("pi", obs_space, action_space,
                                        hid_size = 64, num_hid_layers=2)
        U.initialize()
        saver = tf.train.Saver()
        saver.restore(tf.get_default_session(), param_path)

    def act(self, observation, reward, done):
        action2, unknown = self.actor.act(False, observation)
        return action2


if __name__ == "__main__":

    parser = VisakDartDeepMimicArgParse()
    parser.add_argument("--params-prefix", required=True, type=str)
    args = parser.parse_args()
    env = parser.get_env()

    U.make_session(num_cpu=1).__enter__()

    U.initialize()

    agent = PolicyLoaderAgent(args.params_prefix, env.observation_space, env.action_space)

    while True:
        ob = env.reset(0, pos_stdv=0, vel_stdv=0)
        done = False
        while not done:
            action = agent.act(ob, reward, done)
            ob, reward, done, _ = env.step(action)
            env.render()

トレーニングを受けていないベースラインと比較して、何かを学習したことがはっきりとわかります。ロードアクションは両方のファイルで同じです(つまり、そこに間違いがあると見つかりません)。したがってtrain.py、モデルを正しくロードしている可能性がありpposdg_simple.learn関数の何かが原因で、すぐにそれを忘れます。

誰かがこの状況に光を当てることができますか?

wiluqa

この質問が投稿されてからベースラインリポジトリがかなり変更されているため、これがまだ関連しているかどうかはわかりませんが、変数を復元する前に実際に変数を初期化していないようです。U.initialize()あなた内部の呼び出しを移動してみてくださいpolicy_fn

def policy_fn(name, ob_space, ac_space):
    print("Policy with name: ", name)    
    policy = mlp_policy.MlpPolicy(name=name, ob_space=ob_space, 
                                  ac_space=ac_space, hid_size=64, num_hid_layers=2)
    saver = tf.train.Saver()
    if initial_params_path is not None:  
        print("Tried to restore from ", initial_params_path)
        U.initialize()
        saver.restore(tf.get_default_session(), initial_params_path)
    return policy

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

インテントを追加してモデルをトレーニングするために使用できる api.ai の API はありますか?

分類Dev

トレーニングは100%であり、動画から抽出した画像をディープラーニングモデルにフィードする方法にもかかわらず、検証の精度を向上させることはできません

分類Dev

ModelCheckpointを使用して保存されたモデルの評価がトレーニング履歴の結果と異なるのはなぜですか?

分類Dev

バージョン851であるため、データベースを開くことができません。このサーバーはバージョン782以前をサポートしています。ダウングレードパスはサポートされていません

分類Dev

モデルのトレーニング済みレイヤーから抽出された特徴ベクトルを画像として表示します

分類Dev

データベースに保存されたユーザー名とパスワードを使用してカスタムログインページを作成しようとしていますが、このエラーを解決できません

分類Dev

要素ごとのレイヤーを追加した後、事前にトレーニングされたモデルを使用することは可能ですか?

分類Dev

MIPSで実行されているPuppetでエラーが発生する:セクション内のPuppetのファイルとディレクトリを管理するためのリソースを作成できませんでした

分類Dev

以前にトレーニングされたtf.kerasモデルを事前トレーニングとして使用しようとしていますが、「ValueError:レイヤーdense_3の入力0はlayeと互換性がありません

分類Dev

時系列予測のためにケラにMLPモデルを実装しますが、モデルはうまくトレーニングされません

分類Dev

Debian の依存関係が満たされていないため ffmpeg を再インストールできません / なぜ ffmpeg がビデオ変換で指定されたビットレートを使用しなかったのですか?

分類Dev

dep Ensureの実行時のエラー:マニフェスト、ロック、およびベンダーのグループ化された書き込み:VerifyVendorが存在すると主張したファイルをstatできませんでした

分類Dev

Keras:imagenetで事前にトレーニングされたモデルのラベル名を取得します

分類Dev

バージョン782のため、データベースを開くことができません。このサーバーは、バージョン706以前をサポートしています。ダウングレードパスはサポートされていません

分類Dev

事前にトレーニングされたモデルをKerasでコンパイルして適合させる必要があるのはなぜですか?

分類Dev

train_on_batch()を使用してトレーニングされたKerasで保存されたモデルを再トレーニングします

分類Dev

ターゲットデバイスで開発者モードが有効になっていることを確認します。エラーのため開発者ライセンスを取得できませんでした

分類Dev

注意モデルのスコアリング関数として小さなニューラルネットワークが使用された場合、どのラベル/値に対してトレーニングされますか?

分類Dev

保存されたトリガーのテーブルを更新できません。この保存されたトリガーを呼び出したステートメントによってすでに使用されているためです。

分類Dev

何かがほとんどのGPUメモリを使い果たしており、Tensorflowでモデルをトレーニングできません

分類Dev

トレーニングを続行するためにモデルチェックポイントをロードできません。TensorSliceReaderコンストラクターが失敗しました:一致するファイルが見つかりませんでした

分類Dev

単純なループの助けを借りて後でアクセスできるような方法でこのスクレイピングされたデータを保存する方法を見つけることができませんか?

分類Dev

トレーニング後に新しく蓄積された最近のデータのバッチを使用してニューラルネットワークを再トレーニングするための用語は何ですか?

分類Dev

グラフを分割して、分割された各グループ(またはコンポーネント)の値を等しくまたはバランスさせるために使用できるアルゴリズムはどれですか?

分類Dev

パンダデータフレームをフィルタリングするためにfloatをクエリすると、TypeErrorが発生します: '>' 'str'と 'float'のインスタンス間ではサポートされていません

分類Dev

Tensorflow:事前トレーニングされたCNNモデルの出力ストライドを決定します

分類Dev

SQLite3データベースを開こうとしているときに、ファイルの内容のテキストエンコーディングを特定できないため、ファイルを開くことができませんでした。

分類Dev

BootsrapモデルとPHPでのajaxを使用してログインするためにデータベースごとにデータを検証しようとしましたが、機能しません

分類Dev

Railsモデルは、異なるコントローラーアクション間で状態を保存するために使用できる通常のRubyクラスですか?アクティブレコードもデータベースもまったくありません

Related 関連記事

  1. 1

    インテントを追加してモデルをトレーニングするために使用できる api.ai の API はありますか?

  2. 2

    トレーニングは100%であり、動画から抽出した画像をディープラーニングモデルにフィードする方法にもかかわらず、検証の精度を向上させることはできません

  3. 3

    ModelCheckpointを使用して保存されたモデルの評価がトレーニング履歴の結果と異なるのはなぜですか?

  4. 4

    バージョン851であるため、データベースを開くことができません。このサーバーはバージョン782以前をサポートしています。ダウングレードパスはサポートされていません

  5. 5

    モデルのトレーニング済みレイヤーから抽出された特徴ベクトルを画像として表示します

  6. 6

    データベースに保存されたユーザー名とパスワードを使用してカスタムログインページを作成しようとしていますが、このエラーを解決できません

  7. 7

    要素ごとのレイヤーを追加した後、事前にトレーニングされたモデルを使用することは可能ですか?

  8. 8

    MIPSで実行されているPuppetでエラーが発生する:セクション内のPuppetのファイルとディレクトリを管理するためのリソースを作成できませんでした

  9. 9

    以前にトレーニングされたtf.kerasモデルを事前トレーニングとして使用しようとしていますが、「ValueError:レイヤーdense_3の入力0はlayeと互換性がありません

  10. 10

    時系列予測のためにケラにMLPモデルを実装しますが、モデルはうまくトレーニングされません

  11. 11

    Debian の依存関係が満たされていないため ffmpeg を再インストールできません / なぜ ffmpeg がビデオ変換で指定されたビットレートを使用しなかったのですか?

  12. 12

    dep Ensureの実行時のエラー:マニフェスト、ロック、およびベンダーのグループ化された書き込み:VerifyVendorが存在すると主張したファイルをstatできませんでした

  13. 13

    Keras:imagenetで事前にトレーニングされたモデルのラベル名を取得します

  14. 14

    バージョン782のため、データベースを開くことができません。このサーバーは、バージョン706以前をサポートしています。ダウングレードパスはサポートされていません

  15. 15

    事前にトレーニングされたモデルをKerasでコンパイルして適合させる必要があるのはなぜですか?

  16. 16

    train_on_batch()を使用してトレーニングされたKerasで保存されたモデルを再トレーニングします

  17. 17

    ターゲットデバイスで開発者モードが有効になっていることを確認します。エラーのため開発者ライセンスを取得できませんでした

  18. 18

    注意モデルのスコアリング関数として小さなニューラルネットワークが使用された場合、どのラベル/値に対してトレーニングされますか?

  19. 19

    保存されたトリガーのテーブルを更新できません。この保存されたトリガーを呼び出したステートメントによってすでに使用されているためです。

  20. 20

    何かがほとんどのGPUメモリを使い果たしており、Tensorflowでモデルをトレーニングできません

  21. 21

    トレーニングを続行するためにモデルチェックポイントをロードできません。TensorSliceReaderコンストラクターが失敗しました:一致するファイルが見つかりませんでした

  22. 22

    単純なループの助けを借りて後でアクセスできるような方法でこのスクレイピングされたデータを保存する方法を見つけることができませんか?

  23. 23

    トレーニング後に新しく蓄積された最近のデータのバッチを使用してニューラルネットワークを再トレーニングするための用語は何ですか?

  24. 24

    グラフを分割して、分割された各グループ(またはコンポーネント)の値を等しくまたはバランスさせるために使用できるアルゴリズムはどれですか?

  25. 25

    パンダデータフレームをフィルタリングするためにfloatをクエリすると、TypeErrorが発生します: '>' 'str'と 'float'のインスタンス間ではサポートされていません

  26. 26

    Tensorflow:事前トレーニングされたCNNモデルの出力ストライドを決定します

  27. 27

    SQLite3データベースを開こうとしているときに、ファイルの内容のテキストエンコーディングを特定できないため、ファイルを開くことができませんでした。

  28. 28

    BootsrapモデルとPHPでのajaxを使用してログインするためにデータベースごとにデータを検証しようとしましたが、機能しません

  29. 29

    Railsモデルは、異なるコントローラーアクション間で状態を保存するために使用できる通常のRubyクラスですか?アクティブレコードもデータベースもまったくありません

ホットタグ

アーカイブ