class_docstr: ### Description
      implementation of Res-Net:
        He et al., "Identity Mappings in Deep Residual Networks", arXiv:1603.05027v3
  
  ### Building Blocks
  [CONV]          - Convolutional layer, no activation, no batch norm
  (s)[DOWNRES]    - Downsample residual block.
                      Each block is composed of a first bottleneck block with stride s,
                      followed by n_blocks_per_resolution bottleneck blocks with stride 1.
                      Bottleneck blocks include a squeeze-and-excitation block
  [FC]            - Fully connected layer with nr output channels == num_classes
  
  ### Diagram
  
  INPUT --> [CONV] -->(s=1)[DOWNRES] --> (s=2)[DOWNRES] --> BN, ReLU, mean --> [FC] --> OUTPUT
  
  ### Constraints
class_docstr_tok: ["#","#","#","Description","implementation","of","Res-Net",":","He","et","al.",",","``","Identity","Mappings","in","Deep","Residual","Networks","''",",","arXiv:1603.05027v3","#","#","#","Building","Blocks","[","CONV","]","-","Convolutional","layer",",","no","activation",",","no","batch","norm","(","s",")","[","DOWNRES","]","-","Downsample","residual","block",".","Each","block","is","composed","of","a","first","bottleneck","block","with","stride","s",",","followed","by","n_blocks_per_resolution","bottleneck","blocks","with","stride","1",".","Bottleneck","blocks","include","a","squeeze-and-excitation","block","[","FC","]","-","Fully","connected","layer","with","nr","output","channels","==","num_classes","#","#","#","Diagram","INPUT","--",">","[","CONV","]","--",">","(","s=1",")","[","DOWNRES","]","--",">","(","s=2",")","[","DOWNRES","]","--",">","BN",",","ReLU",",","mean","--",">","[","FC","]","--",">","OUTPUT","#","#","#","Constraints"]
docstr: :return: tuple with batch norm layer, fully connected layer, first conv layer and all residual blocks
docstr_tok: [":","return",":","tuple","with","batch","norm","layer",",","fully","connected","layer",",","first","conv","layer","and","all","residual","blocks"]
code: def create(self):
      """
  
      :return: tuple with batch norm layer, fully connected layer, first conv layer and all residual blocks
      """
      bn = BNLayer()
      fc = FCLayer(self.num_classes)
      conv1 = self.Conv(
          self.n_features[0], acti_func=None, feature_normalization=None
      )
      blocks = []
      blocks += [
          DownResBlock(
              self.n_features[1],
              self.n_blocks_per_resolution,
              1,
              self.Conv,
          )
      ]
      for n in self.n_features[2:]:
          blocks += [
              DownResBlock(
                  n, self.n_blocks_per_resolution, 2, self.Conv
              )
          ]
      return SE_ResNetDesc(bn=bn, fc=fc, conv1=conv1, blocks=blocks)
  
imports: from __future__ import absolute_import, print_function
  import functools
  from collections import namedtuple
  import tensorflow
  from niftynet.layer import layer_util
  from niftynet.layer.base_layer import TrainableLayer
  from niftynet.layer.bn import BNLayer
  from niftynet.layer.convolution import ConvolutionalLayer
  from niftynet.layer.fully_connected import FCLayer
  from niftynet.layer.squeeze_excitation import ChannelSELayer
  from niftynet.network.base_net import BaseNet
label_desc: Use image node_id 2 for calling the SE_ResNet obj's underlying member method code with example usage: obj.create() and returns: SE_ResNetDesc