code: def layer_op(self, features):
      batch_size = features.shape.as_list()[0]
      conv_1 = ConvolutionalLayer(
          20,
          3,
          feature_normalization=None,
          with_bias=True,
          acti_func="relu",
      )
      fc_1 = FullyConnectedLayer(
          20,
          feature_normalization=None,
          with_bias=True,
          acti_func="relu",
      )
      fc_2 = FullyConnectedLayer(
          2, feature_normalization=None, with_bias=True
      )
  
      hidden_feature = conv_1(features, is_training=True)
      hidden_feature = tf.reshape(hidden_feature, [batch_size, -1])
      hidden_feature = fc_1(hidden_feature, is_training=True)
      logits = fc_2(hidden_feature, is_training=True)
      return logits
  
imports: from __future__ import absolute_import, print_function
  import tensorflow
  from niftynet.application.base_application import BaseApplication
  from niftynet.engine.application_factory import ApplicationNetFactory
  from niftynet.engine.application_factory import OptimiserFactory
  from niftynet.engine.application_variables import CONSOLE
  from niftynet.engine.application_variables import TF_SUMMARIES
  from niftynet.engine.sampler_random_vector_v2 import RandomVectorSampler
  from niftynet.layer.convolution import ConvolutionalLayer
  from niftynet.layer.fully_connected import FullyConnectedLayer
  from niftynet.network.base_net import BaseNet
label_desc: Use image node_id 2 for calling the DNet obj's underlying member method code with example usage: obj.layer_op(features) and returns: logits