This page was translated by the Cloud Translation API.
Switch to English

নেটওয়ার্ক

টেনসরফ্লো.আর.জে দেখুন গুগল কোলাবে চালান গিটহাবের উত্স দেখুন নোটবুক ডাউনলোড করুন

ভূমিকা

এই কোলাবে আমরা আপনার এজেন্টগুলির জন্য কাস্টম নেটওয়ার্কগুলি কীভাবে সংজ্ঞায়িত করব তা কভার করব। নেটওয়ার্কগুলি এজেন্টদের দ্বারা প্রশিক্ষিত মডেলটি নির্ধারণ করতে আমাদের সহায়তা করে। টিএফ-এজেন্টগুলিতে আপনি বিভিন্ন ধরণের নেটওয়ার্ক দেখতে পাবেন যা এজেন্টদের জন্য কার্যকর:

প্রধান নেটওয়ার্কসমূহ

  • কিউনেটওয়ার্ক : বিচ্ছিন্ন ক্রিয়া সহ পরিবেশের জন্য ক্লিয়ারিংয়ে ব্যবহৃত এই নেটওয়ার্কটি প্রতিটি সম্ভাব্য ক্রিয়াকলাপের জন্য অনুমানের মূল্য নির্ধারণের জন্য একটি পর্যবেক্ষণকে ম্যাপ করে।
  • ক্রিটিক নেটওয়ার্কস : সাহিত্যে ValueNetworks অভিহিত, কোনও নীতি প্রত্যাশিত প্রত্যাবর্তনের জন্য অনুমান হিসাবে কিছু রাষ্ট্রের মানচিত্রের মান ফাংশনের কিছু সংস্করণ অনুমান করতে শেখে। এই নেটওয়ার্কগুলি অনুমান করে যে এজেন্টটি বর্তমানে কী অবস্থায় রয়েছে।
  • অভিনেতা নেটওয়ার্ক : পর্যবেক্ষণ থেকে ক্রিয়াকলাপে ম্যাপিং শিখুন। এই নেটওয়ার্কগুলি সাধারণত আমাদের নীতিগুলি দ্বারা ক্রিয়া উত্পন্ন করতে ব্যবহৃত হয়।
  • ActorDistributionNetworks: অনুরূপ ActorNetworks কিন্তু এই একটি বিতরণ যা একটি নীতি কর্ম জেনারেট করতে তারপর নমুনা করতে উৎপন্ন।

সহায়ক নেটওয়ার্কসমূহ

  • এনকোডিং নেটওয়ার্ক : ব্যবহারকারীদের সহজেই কোনও নেটওয়ার্কের ইনপুটটিতে প্রি-প্রসেসিং স্তরগুলির ম্যাপিং সংজ্ঞা দিতে দেয়।
  • ডায়নামিকঅনরোললায়ার : একটি সময়ক্রম অনুসারে প্রয়োগ হওয়ার সাথে সাথে পর্বের সীমানায় স্বয়ংক্রিয়ভাবে নেটওয়ার্কের অবস্থা পুনরায় সেট করে।
  • ProjectionNetwork: মত নেটওয়ার্ক CategoricalProjectionNetwork বা NormalProjectionNetwork ইনপুট গ্রহণ করা এবং প্রয়োজনীয় পরামিতি উৎপন্ন শ্রেণীগত, বা স্বাভাবিক ডিস্ট্রিবিউশন তৈরি করতে।

টিএফ-এজেন্টগুলির সমস্ত উদাহরণ প্রাক-কনফিগার করা নেটওয়ার্কগুলির সাথে আসে। তবে এই নেটওয়ার্কগুলি জটিল পর্যবেক্ষণগুলি পরিচালনা করতে সেটআপ করা হয় না।

আপনার যদি এমন পরিবেশ থাকে যা একাধিক পর্যবেক্ষণ / ক্রিয়া প্রকাশ করে এবং আপনার নেটওয়ার্কগুলি কাস্টমাইজ করা দরকার তবে এই টিউটোরিয়ালটি আপনার জন্য!

সেটআপ

আপনি যদি এখনও টিএফ-এজেন্ট ইনস্টল না করে থাকেন তবে চালান:

pip install -q --pre tf-agents[reverb]
WARNING: You are using pip version 20.1.1; however, version 20.2 is available.
You should consider upgrading via the '/tmpfs/src/tf_docs_env/bin/python -m pip install --upgrade pip' command.

 from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import abc
import tensorflow as tf
import numpy as np

from tf_agents.environments import random_py_environment
from tf_agents.environments import tf_py_environment
from tf_agents.networks import encoding_network
from tf_agents.networks import network
from tf_agents.networks import utils
from tf_agents.specs import array_spec
from tf_agents.utils import common as common_utils
from tf_agents.utils import nest_utils

tf.compat.v1.enable_v2_behavior()
 

নেটওয়ার্ক সংজ্ঞায়িত করা হচ্ছে

নেটওয়ার্ক এপিআই

টিএফ-এজেন্টগুলিতে আমরা কেরাস নেটওয়ার্কগুলি থেকে সাবক্লাস করি। এটি দিয়ে আমরা করতে পারি:

  • টার্গেট নেটওয়ার্ক তৈরি করার সময় প্রয়োজনীয় অনুলিপি অপারেশনগুলিকে সহজ করুন।
  • network.variables() কল করার সময় স্বয়ংক্রিয় পরিবর্তনশীল তৈরি করুন।
  • নেটওয়ার্ক ইনপুট_স্পেকগুলির উপর ভিত্তি করে ইনপুটগুলি বৈধ করুন।

EncodingNetwork

EncodingNetwork নেটওয়ার্ক উপরে উল্লিখিত হিসাবে আমাদের সহজেই কিছু এনকোডিং উত্পন্ন করার জন্য কোনও নেটওয়ার্কের ইনপুটটিতে প্রি-প্রসেসিং স্তরগুলির ম্যাপিং সংজ্ঞা দিতে দেয় EncodingNetwork

এনকোডিং নেটওয়ার্কটি বেশিরভাগ optionচ্ছিক স্তরগুলির সমন্বয়ে গঠিত:

  • প্রাক স্তরসমূহ স্তর
  • প্রাক প্রসেসিং কম্বিনার
  • Conv2D
  • চেপটান
  • ঘন

এনকোডিং নেটওয়ার্কগুলির বিষয়ে বিশেষ বিষয় হ'ল ইনপুট প্রিপ্রোসেসিং প্রয়োগ করা হয়। ইনপুট প্রিপ্রোসেসিং preprocessing_layers এবং preprocessing_combiner স্তরগুলির মাধ্যমে সম্ভব। এগুলির প্রত্যেকটি নেস্টেড কাঠামো হিসাবে নির্দিষ্ট করা যেতে পারে। যদি preprocessing_layers input_tensor_spec চেয়ে অগভীর হয় তবে স্তরগুলি সাবনেস্টগুলি পাবে। উদাহরণস্বরূপ, যদি:

 input_tensor_spec = ([TensorSpec(3)] * 2, [TensorSpec(3)] * 5)
preprocessing_layers = (Layer1(), Layer2())
 

তারপরে প্রিপ্রোসেসিং কল করবে:

 preprocessed = [preprocessing_layers[0](observations[0]),
                preprocessing_layers[1](obsrevations[1])]
 

তবে যদি

 preprocessing_layers = ([Layer1() for _ in range(2)],
                        [Layer2() for _ in range(5)])
 

তারপরে প্রিপ্রোসেসিং কল করবে:

 preprocessed = [
  layer(obs) for layer, obs in zip(flatten(preprocessing_layers),
                                    flatten(observations))
]
 

কাস্টম নেটওয়ার্ক

আপনার নিজস্ব নেটওয়ার্ক তৈরি করতে আপনাকে কেবল __init__ এবং call পদ্ধতিগুলিকে ওভাররাইড করতে হবে। আসুন আমরা এমন একটি অভিনেতা নেটওয়ার্ড তৈরি করতে EncodingNetworks নেটওয়ার্কস সম্পর্কে যা শিখেছিলাম তা ব্যবহার করে একটি কাস্টম নেটওয়ার্ক তৈরি করি যা একটি চিত্র এবং ভেক্টর সমন্বিত পর্যবেক্ষণ নেয়।

 class ActorNetwork(network.Network):

  def __init__(self,
               observation_spec,
               action_spec,
               preprocessing_layers=None,
               preprocessing_combiner=None,
               conv_layer_params=None,
               fc_layer_params=(75, 40),
               dropout_layer_params=None,
               activation_fn=tf.keras.activations.relu,
               enable_last_layer_zero_initializer=False,
               name='ActorNetwork'):
    super(ActorNetwork, self).__init__(
        input_tensor_spec=observation_spec, state_spec=(), name=name)

    # For simplicity we will only support a single action float output.
    self._action_spec = action_spec
    flat_action_spec = tf.nest.flatten(action_spec)
    if len(flat_action_spec) > 1:
      raise ValueError('Only a single action is supported by this network')
    self._single_action_spec = flat_action_spec[0]
    if self._single_action_spec.dtype not in [tf.float32, tf.float64]:
      raise ValueError('Only float actions are supported by this network.')

    kernel_initializer = tf.keras.initializers.VarianceScaling(
        scale=1. / 3., mode='fan_in', distribution='uniform')
    self._encoder = encoding_network.EncodingNetwork(
        observation_spec,
        preprocessing_layers=preprocessing_layers,
        preprocessing_combiner=preprocessing_combiner,
        conv_layer_params=conv_layer_params,
        fc_layer_params=fc_layer_params,
        dropout_layer_params=dropout_layer_params,
        activation_fn=activation_fn,
        kernel_initializer=kernel_initializer,
        batch_squash=False)

    initializer = tf.keras.initializers.RandomUniform(
        minval=-0.003, maxval=0.003)

    self._action_projection_layer = tf.keras.layers.Dense(
        flat_action_spec[0].shape.num_elements(),
        activation=tf.keras.activations.tanh,
        kernel_initializer=initializer,
        name='action')

  def call(self, observations, step_type=(), network_state=()):
    outer_rank = nest_utils.get_outer_rank(observations, self.input_tensor_spec)
    # We use batch_squash here in case the observations have a time sequence
    # compoment.
    batch_squash = utils.BatchSquash(outer_rank)
    observations = tf.nest.map_structure(batch_squash.flatten, observations)

    state, network_state = self._encoder(
        observations, step_type=step_type, network_state=network_state)
    actions = self._action_projection_layer(state)
    actions = common_utils.scale_to_spec(actions, self._single_action_spec)
    actions = batch_squash.unflatten(actions)
    return tf.nest.pack_sequence_as(self._action_spec, [actions]), network_state
 

আসুন আমরা কাঠামোগত পর্যবেক্ষণগুলি তৈরি করতে এবং আমাদের বাস্তবায়নটিকে বৈধতা RandomPyEnvironment জন্য একটি RandomPyEnvironment তৈরি করি।

 action_spec = array_spec.BoundedArraySpec((3,), np.float32, minimum=0, maximum=10)
observation_spec =  {
    'image': array_spec.BoundedArraySpec((16, 16, 3), np.float32, minimum=0,
                                        maximum=255),
    'vector': array_spec.BoundedArraySpec((5,), np.float32, minimum=-100,
                                          maximum=100)}

random_env = random_py_environment.RandomPyEnvironment(observation_spec, action_spec=action_spec)

# Convert the environment to a TFEnv to generate tensors.
tf_env = tf_py_environment.TFPyEnvironment(random_env)
 

যেহেতু আমরা পর্যবেক্ষণগুলি একটি ডিক হিসাবে সংজ্ঞায়িত করেছি আমাদের এগুলি পরিচালনা করার জন্য আমাদের প্রিপ্রোসেসিং স্তর তৈরি করতে হবে।

 preprocessing_layers = {
    'image': tf.keras.models.Sequential([tf.keras.layers.Conv2D(8, 4),
                                        tf.keras.layers.Flatten()]),
    'vector': tf.keras.layers.Dense(5)
    }
preprocessing_combiner = tf.keras.layers.Concatenate(axis=-1)
actor = ActorNetwork(tf_env.observation_spec(), 
                     tf_env.action_spec(),
                     preprocessing_layers=preprocessing_layers,
                     preprocessing_combiner=preprocessing_combiner)
 

এখন যেহেতু আমাদের অভিনেতার নেটওয়ার্ক রয়েছে আমরা পরিবেশ থেকে পর্যবেক্ষণগুলি প্রক্রিয়া করতে পারি।

 time_step = tf_env.reset()
actor(time_step.observation, time_step.step_type)
 
(<tf.Tensor: shape=(1, 3), dtype=float32, numpy=array([[5.3831844, 4.975593 , 5.310139 ]], dtype=float32)>,
 ())

এই একই কৌশলটি এজেন্টদের দ্বারা ব্যবহৃত প্রধান যে কোনও নেটওয়ার্ককে কাস্টমাইজ করতে ব্যবহার করা যেতে পারে। আপনি যেকোনো প্রাকপ্রসেসিং সংজ্ঞায়িত করতে পারেন এবং এটিকে নেটওয়ার্কের বাকী অংশে সংযুক্ত করতে পারেন। আপনি নিজের কাস্টমটিকে সংজ্ঞায়িত করার সাথে সাথে নেটওয়ার্কের মিলের আউটপুট স্তর সংজ্ঞা নিশ্চিত করুন।