code: def _get_NN_prediction(self, state):
      assert state.shape.rank == 5  # Batch, H, W, Channel, History
      state = tf.transpose(
          state, [0, 1, 2, 4, 3]
      )  # swap channel & history, to be compatible with old models
      image = tf.reshape(
          state,
          [-1]
          + list(STATE_SHAPE[:2])
          + [STATE_SHAPE[2] * FRAME_HISTORY],
      )
      image = tf.cast(image, tf.float32)
  
      image = image / 255.0
      with argscope(Conv2D, activation=tf.nn.relu):
          l = Conv2D("conv0", image, 32, 5)
          l = MaxPooling("pool0", l, 2)
          l = Conv2D("conv1", l, 32, 5)
          l = MaxPooling("pool1", l, 2)
          l = Conv2D("conv2", l, 64, 4)
          l = MaxPooling("pool2", l, 2)
          l = Conv2D("conv3", l, 64, 3)
  
      l = FullyConnected("fc0", l, 512)
      l = PReLU("prelu", l)
      logits = FullyConnected(
          "fc-pi", l, NUM_ACTIONS
      )  # unnormalized policy
      value = FullyConnected("fc-v", l, 1)
      return logits, value
  
imports: import argparse
  import cv2
  import gym
  import multiprocessing
  import numpy
  import os
  import sys
  import uuid
  import tensorflow
  from six.moves import queue
  from concurrent import futures
  from tensorpack import *
  from tensorpack.tfutils.gradproc import MapGradient, SummaryGradient
  from tensorpack.utils.concurrency import ensure_proc_terminate, start_proc_mask_signal
  from tensorpack.utils.gpu import get_num_gpu
  from tensorpack.utils.serialize import dumps
  from atari_wrapper import FireResetEnv, FrameStack, LimitLength, MapState
  from common import Evaluator, eval_model_multithread, play_n_episodes
  from simulator import SimulatorMaster, SimulatorProcess, TransitionExperience
label_desc: Use image node_id 2 for calling the Model obj's underlying member method code with example usage: obj._get_NN_prediction(state) and returns: logits,  value