docstr: Learn loop
          
docstr_tok: ["Learn","loop"]
code: def run_learn(self):
      """Learn loop"""
      loader = paddle.io.DataLoader.from_generator(capacity=5)
      loader.set_batch_generator(self._batch_reader())
  
      for (
          obs_np,
          actions_np,
          behaviour_logits_np,
          rewards_np,
          dones_np,
      ) in loader():
          with self.learn_time_stat:
              (
                  total_loss,
                  pi_loss,
                  vf_loss,
                  entropy,
                  kl,
              ) = self.agent.learn(
                  obs_np,
                  actions_np,
                  behaviour_logits_np,
                  rewards_np,
                  dones_np,
                  self.lr,
                  self.entropy_coeff,
              )
  
          self.params_updated = True
  
          self.total_loss_stat.add(total_loss)
          self.pi_loss_stat.add(pi_loss)
          self.vf_loss_stat.add(vf_loss)
          self.entropy_stat.add(entropy)
          self.kl_stat.add(kl)
  
imports: import gym
  import numpy
  import os
  from six.moves import queue
  import time
  import threading
  import parl
  import paddle
  from atari_model import AtariModel
  from atari_agent import AtariAgent
  from parl.env.atari_wrappers import wrap_deepmind
  from parl.utils import logger, summary
  from parl.utils.scheduler import PiecewiseScheduler
  from parl.utils.time_stat import TimeStat
  from parl.utils.window_stat import WindowStat
  from actor import Actor
label_desc: Use image node_id 4 for calling the Learner obj's underlying member method code with example usage: obj.run_learn() without return types