चेकपॉइंटर और पॉलिसीसेवर

TensorFlow.org पर देखें Google Colab में चलाएं GitHub पर स्रोत देखें नोटबुक डाउनलोड करें

परिचय

tf_agents.utils.common.Checkpointer बचाने / एक स्थानीय भंडारण से प्रशिक्षण राज्य, नीति राज्य, और / करने के लिए replay_buffer राज्य लोड करने के लिए एक उपयोगिता है।

tf_agents.policies.policy_saver.PolicySaver को बचाने के लिए / लोड केवल नीति एक उपकरण है, और की तुलना में हल्का है Checkpointer । आप उपयोग कर सकते हैं PolicySaver कोड है कि नीति बनाई की किसी भी जानकारी के बिना साथ ही मॉडल तैनात करने के लिए।

इस ट्यूटोरियल में, हम DQN का उपयोग एक मॉडल को प्रशिक्षित करने के लिए, तो उपयोग करेगा Checkpointer और PolicySaver शो हम कैसे की दुकान और एक इंटरैक्टिव रास्ते में राज्यों और मॉडल लोड कर सकते हैं करने के लिए। ध्यान दें कि हम TF2.0 के नए saved_model टूलींग और के लिए प्रारूप का उपयोग करेगा 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 एजेंट स्थापित करने जा रहे हैं। विवरण डिफ़ॉल्ट रूप से छिपे हुए हैं क्योंकि वे इस कोलाब का मुख्य भाग नहीं हैं, लेकिन आप विवरण देखने के लिए 'शो कोड' पर क्लिक कर सकते हैं।

हाइपरपैरामीटर

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>

जीआईएफ

सेटअप चेकपॉइंटर और पॉलिसीसेवर

अब हम चेकपॉइंटर और पॉलिसीसेवर का उपयोग करने के लिए तैयार हैं।

चेकपॉइंटर

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)

जीआईएफ

निर्यात और आयात

बाकी कोलाब आपको चेकपॉइंटर और नीति निर्देशिकाओं को निर्यात / आयात करने में मदद करेगा जैसे कि आप बाद में प्रशिक्षण जारी रख सकते हैं और फिर से प्रशिक्षण के बिना मॉडल को तैनात कर सकते हैं।

अब आप 'एक पुनरावृत्ति को प्रशिक्षित करें' पर वापस जा सकते हैं और कुछ और बार प्रशिक्षित कर सकते हैं ताकि आप बाद में अंतर को समझ सकें। एक बार जब आपको थोड़े बेहतर परिणाम दिखाई देने लगें, तो नीचे जारी रखें।

ज़िप फ़ाइल बनाएँ और ज़िप फ़ाइल अपलोड करें (कोड देखने के लिए डबल-क्लिक करें)

चेकपॉइंट डायरेक्टरी से एक ज़िप्ड फ़ाइल बनाएँ।

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 बार) के प्रशिक्षण के बाद, चेकपॉइंट ज़िप फ़ाइल डाउनलोड करें, और प्रशिक्षण को रीसेट करने के लिए "रनटाइम> पुनरारंभ करें और सभी चलाएं" पर जाएं, और इस सेल पर वापस आएं। अब आप डाउनलोड की गई ज़िप फ़ाइल को अपलोड कर सकते हैं, और प्रशिक्षण जारी रख सकते हैं।

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

एक बार चेकपॉइंट निर्देशिका अपलोड करने के बाद, प्रशिक्षण जारी रखने के लिए 'एक पुनरावृत्ति को प्रशिक्षित करें' पर वापस जाएं या लोड की गई नीति के प्रदर्शन की जांच के लिए 'वीडियो जेनरेट करें' पर वापस जाएं।

वैकल्पिक रूप से, आप पॉलिसी (मॉडल) को सहेज सकते हैं और इसे पुनर्स्थापित कर सकते हैं। चेकपॉइंट के विपरीत, आप प्रशिक्षण जारी नहीं रख सकते हैं, लेकिन आप अभी भी मॉडल को तैनात कर सकते हैं। ध्यान दें कि डाउनलोड की गई फ़ाइल चेकपॉइंटर की तुलना में बहुत छोटी है।

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)

जीआईएफ

सहेजा गया मॉडलPyTFEAgerPolicy

आप TF नीति का उपयोग नहीं करना चाहते हैं, तो आप भी saved_model सीधे अजगर env साथ के उपयोग के माध्यम का उपयोग कर सकते 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)

जीआईएफ

नीति को 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])}