class_docstr: PPO class
class_docstr_tok: ["PPO","class"]
docstr: Update actor network
  :param reward: cumulative reward batch
  :param state: state batch
  :return: None
docstr_tok: ["Update","actor","network",":","param","reward",":","cumulative","reward","batch",":","param","state",":","state","batch",":","return",":","None"]
code: def train_critic(self, reward, state):
      """
      Update actor network
      :param reward: cumulative reward batch
      :param state: state batch
      :return: None
      """
      reward = np.array(reward, dtype=np.float32)
      with tf.GradientTape() as tape:
          advantage = reward - self.critic(state)
          loss = tf.reduce_mean(tf.square(advantage))
      grad = tape.gradient(loss, self.critic.trainable_weights)
      self.critic_opt.apply_gradients(
          zip(grad, self.critic.trainable_weights)
      )
  
file_path: TensorLayer/examples/reinforcement_learning/tutorial_PPO.py
imports: import argparse
  import os
  import time
  import gym
  import matplotlib.pyplot
  import numpy
  import tensorflow
  import tensorflow_probability
  import tensorlayer
label_desc: Use image node_id 3 for calling the PPO obj's underlying member method code with example usage: obj.train_critic(reward, state) without return types