code: def inference(images, dropout=False):
      """Build the CNN model.
      Args:
        images: Images returned from distorted_inputs() or inputs().
        dropout: Boolean controlling whether to use dropout or not
      Returns:
        Logits
      """
      if FLAGS.dataset == "mnist":
          first_conv_shape = [5, 5, 1, 64]
      else:
          first_conv_shape = [5, 5, 3, 64]
  
      # conv1
      with tf.variable_scope("conv1") as scope:
          kernel = _variable_with_weight_decay(
              "weights", shape=first_conv_shape, stddev=1e-4, wd=0.0
          )
          conv = tf.nn.conv2d(
              images, kernel, [1, 1, 1, 1], padding="SAME"
          )
          biases = _variable_on_cpu(
              "biases", [64], tf.constant_initializer(0.0)
          )
          bias = tf.nn.bias_add(conv, biases)
          conv1 = tf.nn.relu(bias, name=scope.name)
          if dropout:
              conv1 = tf.nn.dropout(conv1, 0.3, seed=FLAGS.dropout_seed)
  
      # pool1
      pool1 = tf.nn.max_pool(
          conv1,
          ksize=[1, 3, 3, 1],
          strides=[1, 2, 2, 1],
          padding="SAME",
          name="pool1",
      )
  
      # norm1
      norm1 = tf.nn.lrn(
          pool1, 4, bias=1.0, alpha=0.001 / 9.0, beta=0.75, name="norm1"
      )
  
      # conv2
      with tf.variable_scope("conv2") as scope:
          kernel = _variable_with_weight_decay(
              "weights", shape=[5, 5, 64, 128], stddev=1e-4, wd=0.0
          )
          conv = tf.nn.conv2d(
              norm1, kernel, [1, 1, 1, 1], padding="SAME"
          )
          biases = _variable_on_cpu(
              "biases", [128], tf.constant_initializer(0.1)
          )
          bias = tf.nn.bias_add(conv, biases)
          conv2 = tf.nn.relu(bias, name=scope.name)
          if dropout:
              conv2 = tf.nn.dropout(conv2, 0.3, seed=FLAGS.dropout_seed)
  
      # norm2
      norm2 = tf.nn.lrn(
          conv2, 4, bias=1.0, alpha=0.001 / 9.0, beta=0.75, name="norm2"
      )
  
      # pool2
      pool2 = tf.nn.max_pool(
          norm2,
          ksize=[1, 3, 3, 1],
          strides=[1, 2, 2, 1],
          padding="SAME",
          name="pool2",
      )
  
      # local3
      with tf.variable_scope("local3") as scope:
          # Move everything into depth so we can perform a single matrix multiply.
          reshape = tf.reshape(pool2, [FLAGS.batch_size, -1])
          dim = reshape.get_shape()[1].value
          weights = _variable_with_weight_decay(
              "weights", shape=[dim, 384], stddev=0.04, wd=0.004
          )
          biases = _variable_on_cpu(
              "biases", [384], tf.constant_initializer(0.1)
          )
          local3 = tf.nn.relu(
              tf.matmul(reshape, weights) + biases, name=scope.name
          )
          if dropout:
              local3 = tf.nn.dropout(
                  local3, 0.5, seed=FLAGS.dropout_seed
              )
  
      # local4
      with tf.variable_scope("local4") as scope:
          weights = _variable_with_weight_decay(
              "weights", shape=[384, 192], stddev=0.04, wd=0.004
          )
          biases = _variable_on_cpu(
              "biases", [192], tf.constant_initializer(0.1)
          )
          local4 = tf.nn.relu(
              tf.matmul(local3, weights) + biases, name=scope.name
          )
          if dropout:
              local4 = tf.nn.dropout(
                  local4, 0.5, seed=FLAGS.dropout_seed
              )
  
      # compute logits
      with tf.variable_scope("softmax_linear") as scope:
          weights = _variable_with_weight_decay(
              "weights",
              [192, FLAGS.nb_labels],
              stddev=1 / 192.0,
              wd=0.0,
          )
          biases = _variable_on_cpu(
              "biases", [FLAGS.nb_labels], tf.constant_initializer(0.0)
          )
          logits = tf.add(
              tf.matmul(local4, weights), biases, name=scope.name
          )
  
      return logits
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  from datetime import datetime
  import math
  import numpy
  from six.moves import xrange
  import tensorflow.compat.v1
  import time
  import utils
label_desc: Use image node_id 3 for calling a global function with example usage: inference(images, dropout) and returns: logits