class_docstr: Use neural networks as an alternative to GPs to model distributions over functions in bayesian optimization.
  
  Parameters
  ----------
  optimize : maximize | minimize, default = maximize
      If 'maximize', the tuner will target to maximize metrics. If 'minimize', the tuner will target to minimize metrics.
  sample_size : int, default = 1000
      Number of samples to select in each iteration. The best one will be picked from the samples as the next trial.
  trials_per_update : int, default = 20
      Number of trials to collect before updating the model.
  num_epochs_per_training : int, default = 500
      Number of epochs to train DNGO model.
code: def __init__(
      self,
      optimize_mode="maximize",
      sample_size=1000,
      trials_per_update=20,
      num_epochs_per_training=500,
  ):
      self.searchspace_json = None
      self.random_state = None
      self.model = DNGO(
          do_mcmc=False, num_epochs=num_epochs_per_training
      )
      self._model_initialized = False
      self.sample_size = sample_size
      self.trials_per_update = trials_per_update
      self.optimize_mode = optimize_mode
  
      self.x = []
      self.y = []
  
imports: import logging
  import warnings
  import numpy
  import torch
  from pybnn import DNGO
  from torch.distributions import Normal
  import nni.parameter_expressions
  from nni import ClassArgsValidator
  from nni.common.hpo_utils import validate_search_space
  from nni.tuner import Tuner
label_desc: Use image node_id 1 to create a new DNGOTuner object from inherited base classes: Tuner with example: obj = DNGOTuner(optimize_mode, sample_size, trials_per_update, num_epochs_per_training)