code: def layer_op(self, noise):
      n_chns = noise.shape[-1]
      conv_1 = ConvolutionalLayer(
          20,
          10,
          feature_normalization="batch",
          acti_func="selu",
          with_bias=True,
      )
      conv_2 = ConvolutionalLayer(
          20,
          10,
          feature_normalization="batch",
          acti_func="selu",
          with_bias=True,
      )
      conv_3 = ConvolutionalLayer(
          n_chns, 10, feature_normalization=None, with_bias=True
      )
      hidden_feature = conv_1(noise, is_training=True)
      hidden_feature = conv_2(hidden_feature, is_training=True)
      fake_features = conv_3(hidden_feature, is_training=True)
      return fake_features
  
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 GNet obj's underlying member method code with example usage: obj.layer_op(noise) and returns: fake_features