Checkpoint و PolicySaver

مشاهده در TensorFlow.org در Google Colab اجرا شود مشاهده منبع در GitHub دانلود دفترچه یادداشت

معرفی

tf_agents.utils.common.Checkpointer یک ابزار برای ذخیره / بار دولت آموزش، دولت سیاست، و دولت replay_buffer به / از یک ذخیره سازی محلی است.

tf_agents.policies.policy_saver.PolicySaver ابزاری برای ذخیره / بار تنها از سیاست است، و سبک تر از است Checkpointer . شما می توانید با استفاده از PolicySaver به استقرار مدل و همچنین بدون هیچ گونه دانش از کد است که ایجاد سیاست.

در این آموزش، ما DQN برای آموزش یک مدل، سپس با استفاده از استفاده از Checkpointer و PolicySaver تا نشان دهد چگونه ما می توانیم ذخیره و بارگذاری دولت ها و مدل در یک روش تعاملی. توجه داشته باشید که ما قالب saved_model جدید TF2.0 و فرمت برای استفاده PolicySaver .

برپایی

اگر وابستگی های زیر را نصب نکرده اید، اجرا کنید:

sudo apt-get update
sudo apt-get install -y xvfb ffmpeg python-opengl
pip install pyglet
pip install 'imageio==2.4.0'
pip install 'xvfbwrapper==0.2.9'
pip install tf-agents[reverb]
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import base64
import imageio
import io
import matplotlib
import matplotlib.pyplot as plt
import os
import shutil
import tempfile
import tensorflow as tf
import zipfile
import IPython

try:
  from google.colab import files
except ImportError:
  files = None
from tf_agents.agents.dqn import dqn_agent
from tf_agents.drivers import dynamic_step_driver
from tf_agents.environments import suite_gym
from tf_agents.environments import tf_py_environment
from tf_agents.eval import metric_utils
from tf_agents.metrics import tf_metrics
from tf_agents.networks import q_network
from tf_agents.policies import policy_saver
from tf_agents.policies import py_tf_eager_policy
from tf_agents.policies import random_tf_policy
from tf_agents.replay_buffers import tf_uniform_replay_buffer
from tf_agents.trajectories import trajectory
from tf_agents.utils import common

tempdir = os.getenv("TEST_TMPDIR", tempfile.gettempdir())
# Set up a virtual display for rendering OpenAI gym environments.
import xvfbwrapper
xvfbwrapper.Xvfb(1400, 900, 24).start()

عامل DQN

ما می‌خواهیم عامل DQN را درست مانند colab قبلی راه‌اندازی کنیم. جزئیات به‌طور پیش‌فرض پنهان می‌شوند، زیرا بخش اصلی این همکاری نیستند، اما می‌توانید برای مشاهده جزئیات روی «نمایش کد» کلیک کنید.

فراپارامترها

env_name = "CartPole-v1"

collect_steps_per_iteration = 100
replay_buffer_capacity = 100000

fc_layer_params = (100,)

batch_size = 64
learning_rate = 1e-3
log_interval = 5

num_eval_episodes = 10
eval_interval = 1000

محیط

train_py_env = suite_gym.load(env_name)
eval_py_env = suite_gym.load(env_name)

train_env = tf_py_environment.TFPyEnvironment(train_py_env)
eval_env = tf_py_environment.TFPyEnvironment(eval_py_env)

عامل

جمع آوری داده ها

WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow/python/autograph/impl/api.py:383: ReplayBuffer.get_next (from tf_agents.replay_buffers.replay_buffer) is deprecated and will be removed in a future version.
Instructions for updating:
Use `as_dataset(..., single_deterministic_pass=False) instead.

عامل را آموزش دهید

نسل ویدیو

یک ویدیو تولید کنید

با تولید یک ویدیو، عملکرد خط‌مشی را بررسی کنید.

print ('global_step:')
print (global_step)
run_episodes_and_create_video(agent.policy, eval_env, eval_py_env)
global_step:
<tf.Variable 'global_step:0' shape=() dtype=int64, numpy=0>

gif

Checkpointer و PolicySaver را راه اندازی کنید

اکنون ما آماده استفاده از Checkpointer و PolicySaver هستیم.

بازرسی

checkpoint_dir = os.path.join(tempdir, 'checkpoint')
train_checkpointer = common.Checkpointer(
    ckpt_dir=checkpoint_dir,
    max_to_keep=1,
    agent=agent,
    policy=agent.policy,
    replay_buffer=replay_buffer,
    global_step=global_step
)

محافظ سیاست

policy_dir = os.path.join(tempdir, 'policy')
tf_policy_saver = policy_saver.PolicySaver(agent.policy)
2022-01-20 12:15:14.054931: W tensorflow/python/util/util.cc:368] Sets are not currently considered sequences, but this may change in the future, so consider avoiding using them.

یک تکرار را آموزش دهید

print('Training one iteration....')
train_one_iteration()
Training one iteration....
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow/python/util/dispatch.py:1096: calling foldr_v2 (from tensorflow.python.ops.functional_ops) with back_prop=False is deprecated and will be removed in a future version.
Instructions for updating:
back_prop=False is deprecated. Consider using tf.stop_gradient instead.
Instead of:
results = tf.foldr(fn, elems, back_prop=False)
Use:
results = tf.nest.map_structure(tf.stop_gradient, tf.foldr(fn, elems))
WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow/python/util/dispatch.py:1096: calling foldr_v2 (from tensorflow.python.ops.functional_ops) with back_prop=False is deprecated and will be removed in a future version.
Instructions for updating:
back_prop=False is deprecated. Consider using tf.stop_gradient instead.
Instead of:
results = tf.foldr(fn, elems, back_prop=False)
Use:
results = tf.nest.map_structure(tf.stop_gradient, tf.foldr(fn, elems))
iteration: 1 loss: 1.0214563608169556

ذخیره در ایست بازرسی

train_checkpointer.save(global_step)

بازرسی ایست بازرسی

برای اینکه این کار انجام شود، کل مجموعه اشیاء باید به همان روشی که پست بازرسی ایجاد شد، بازسازی شوند.

train_checkpointer.initialize_or_restore()
global_step = tf.compat.v1.train.get_global_step()

همچنین خط مشی را ذخیره کنید و به یک مکان صادر کنید

tf_policy_saver.save(policy_dir)
WARNING:absl:Function `function_with_signature` contains input name(s) 0/step_type, 0/reward, 0/discount, 0/observation with unsupported characters which will be renamed to step_type, reward, discount, observation in the SavedModel.
WARNING:absl:Found untraced functions such as QNetwork_layer_call_fn, QNetwork_layer_call_and_return_conditional_losses, EncodingNetwork_layer_call_fn, EncodingNetwork_layer_call_and_return_conditional_losses, dense_1_layer_call_fn while saving (showing 5 of 25). These functions will not be directly callable after loading.
INFO:tensorflow:Assets written to: /tmp/policy/assets
/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow/python/saved_model/nested_structure_coder.py:561: UserWarning: Encoding a StructuredValue with type tf_agents.policies.greedy_policy.DeterministicWithLogProb_ACTTypeSpec; loading this StructuredValue will require that this type be imported and registered.
  "imported and registered." % type_spec_class_name)
INFO:tensorflow:Assets written to: /tmp/policy/assets

این خط‌مشی را می‌توان بدون اطلاع از اینکه چه عامل یا شبکه‌ای برای ایجاد آن استفاده شده است بارگیری کرد. این امر استقرار سیاست را بسیار آسان تر می کند.

خط مشی ذخیره شده را بارگیری کنید و نحوه عملکرد آن را بررسی کنید

saved_policy = tf.saved_model.load(policy_dir)
run_episodes_and_create_video(saved_policy, eval_env, eval_py_env)

gif

صادرات و واردات

بقیه بخش‌ها به شما کمک می‌کنند تا فهرست‌های بازرسی و خط‌مشی را صادرات/وارد کنید تا بتوانید در مرحله بعد به آموزش ادامه دهید و مدل را بدون نیاز به آموزش مجدد اجرا کنید.

اکنون می‌توانید به «آموزش یک تکرار» برگردید و چند بار دیگر تمرین کنید تا بتوانید تفاوت را بعداً درک کنید. هنگامی که شروع به دیدن نتایج کمی بهتر کردید، در زیر ادامه دهید.

ایجاد فایل فشرده و آپلود فایل فشرده (برای دیدن کد دوبار کلیک کنید)

یک فایل فشرده از دایرکتوری چک پوینت ایجاد کنید.

train_checkpointer.save(global_step)
checkpoint_zip_filename = create_zip_file(checkpoint_dir, os.path.join(tempdir, 'exported_cp'))

فایل فشرده را دانلود کنید.

if files is not None:
  files.download(checkpoint_zip_filename) # try again if this fails: https://github.com/googlecolab/colabtools/issues/469

پس از مدتی (10-15 بار) آموزش، فایل فشرده چک را دانلود کرده و به مسیر "Runtime > Restart and Run all" بروید تا آموزش را ریست کنید و دوباره به این سلول بازگردید. اکنون می توانید فایل فشرده دانلود شده را آپلود کرده و آموزش را ادامه دهید.

upload_and_unzip_file_to(checkpoint_dir)
train_checkpointer.initialize_or_restore()
global_step = tf.compat.v1.train.get_global_step()

پس از آپلود فهرست پست بازرسی، برای ادامه آموزش به «آموزش یک تکرار» برگردید یا برای بررسی عملکرد خط مشی بارگذاری شده، به «ایجاد ویدیو» برگردید.

یا می توانید خط مشی (مدل) را ذخیره کرده و آن را بازیابی کنید. برخلاف چک پوینت، نمی توانید به آموزش ادامه دهید، اما همچنان می توانید مدل را مستقر کنید. توجه داشته باشید که فایل دانلود شده بسیار کوچکتر از checkpointer است.

tf_policy_saver.save(policy_dir)
policy_zip_filename = create_zip_file(policy_dir, os.path.join(tempdir, 'exported_policy'))
WARNING:absl:Function `function_with_signature` contains input name(s) 0/step_type, 0/reward, 0/discount, 0/observation with unsupported characters which will be renamed to step_type, reward, discount, observation in the SavedModel.
WARNING:absl:Found untraced functions such as QNetwork_layer_call_fn, QNetwork_layer_call_and_return_conditional_losses, EncodingNetwork_layer_call_fn, EncodingNetwork_layer_call_and_return_conditional_losses, dense_1_layer_call_fn while saving (showing 5 of 25). These functions will not be directly callable after loading.
INFO:tensorflow:Assets written to: /tmp/policy/assets
/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/tensorflow/python/saved_model/nested_structure_coder.py:561: UserWarning: Encoding a StructuredValue with type tf_agents.policies.greedy_policy.DeterministicWithLogProb_ACTTypeSpec; loading this StructuredValue will require that this type be imported and registered.
  "imported and registered." % type_spec_class_name)
INFO:tensorflow:Assets written to: /tmp/policy/assets
if files is not None:
  files.download(policy_zip_filename) # try again if this fails: https://github.com/googlecolab/colabtools/issues/469

دایرکتوری خط مشی دانلود شده (exported_policy.zip) را آپلود کنید و نحوه عملکرد خط مشی ذخیره شده را بررسی کنید.

upload_and_unzip_file_to(policy_dir)
saved_policy = tf.saved_model.load(policy_dir)
run_episodes_and_create_video(saved_policy, eval_env, eval_py_env)

gif

SavedModelPyTFEagerPolicy

اگر شما نمی خواهید به استفاده از سیاست TF، پس از آن شما همچنین می توانید saved_model طور مستقیم از طریق استفاده از استفاده با پاکت پایتون py_tf_eager_policy.SavedModelPyTFEagerPolicy .

توجه داشته باشید که این تنها زمانی کار می کند که حالت مشتاق فعال باشد.

eager_py_policy = py_tf_eager_policy.SavedModelPyTFEagerPolicy(
    policy_dir, eval_py_env.time_step_spec(), eval_py_env.action_spec())

# Note that we're passing eval_py_env not eval_env.
run_episodes_and_create_video(eager_py_policy, eval_py_env, eval_py_env)

gif

سیاست را به TFLite تبدیل کنید

مشاهده مبدل TensorFlow بازگشت به محتوا | برای جزئیات بیشتر.

converter = tf.lite.TFLiteConverter.from_saved_model(policy_dir, signature_keys=["action"])
tflite_policy = converter.convert()
with open(os.path.join(tempdir, 'policy.tflite'), 'wb') as f:
  f.write(tflite_policy)
2022-01-20 12:15:59.646042: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:363] Ignored output_format.
2022-01-20 12:15:59.646082: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:366] Ignored drop_control_dependency.
2022-01-20 12:15:59.646088: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:372] Ignored change_concat_input_ranges.
WARNING:absl:Buffer deduplication procedure will be skipped when flatbuffer library is not properly loaded

استنتاج را روی مدل TFLite اجرا کنید

مشاهده TensorFlow بازگشت به محتوا | استنتاج برای جزئیات بیشتر.

import numpy as np
interpreter = tf.lite.Interpreter(os.path.join(tempdir, 'policy.tflite'))

policy_runner = interpreter.get_signature_runner()
print(policy_runner._inputs)
{'0/discount': 1, '0/observation': 2, '0/reward': 3, '0/step_type': 0}
policy_runner(**{
    '0/discount':tf.constant(0.0),
    '0/observation':tf.zeros([1,4]),
    '0/reward':tf.constant(0.0),
    '0/step_type':tf.constant(0)})
{'action': array([0])}