class_docstr: ### Description
      reimplementation of 3D U-net
        Çiçek et al., "3D U-Net: Learning dense Volumetric segmentation from
        sparse annotation", MICCAI '16
  
  ### Building blocks
  [dBLOCK]        - Downsampling UNet Block
  [uBLOCK]        - Upsampling UNet Block
  [nBLOCK]        - UNet Block with no final operation
  [CROP]          - Cropping layer
  
  ### Diagram
  
  INPUT  -->  [dBLOCK] - - - - - - - - - - - - - - - -  [nBLOCK] --> [CROP] --> OUTPUT
                  |                                       |
                  [dBLOCK] - - - - - - - - - - - - [uBLOCK]
                      |                              |
                      [dBLOCK]  - - - - - - - [uBLOCK]
                          |                      |
                          --------[uBLOCk] ------
  
  ### Constraints
   - Image size - 4 should be divisible by 8
   - Label size should be more than 88
   - border is 44
class_docstr_tok: ["#","#","#","Description","reimplementation","of","3D","U-net","\u00c7i\u00e7ek","et","al.",",","``","3D","U-Net",":","Learning","dense","Volumetric","segmentation","from","sparse","annotation","''",",","MICCAI","'16","#","#","#","Building","blocks","[","dBLOCK","]","-","Downsampling","UNet","Block","[","uBLOCK","]","-","Upsampling","UNet","Block","[","nBLOCK","]","-","UNet","Block","with","no","final","operation","[","CROP","]","-","Cropping","layer","#","#","#","Diagram","INPUT","--",">","[","dBLOCK","]","-","-","-","-","-","-","-","-","-","-","-","-","-","-","-","-","[","nBLOCK","]","--",">","[","CROP","]","--",">","OUTPUT","|","|","[","dBLOCK","]","-","-","-","-","-","-","-","-","-","-","-","-","[","uBLOCK","]","|","|","[","dBLOCK","]","-","-","-","-","-","-","-","[","uBLOCK","]","|","|","--","--","--","--","[","uBLOCk","]","--","--","--","#","#","#","Constraints","-","Image","size","-","4","should","be","divisible","by","8","-","Label","size","should","be","more","than","88","-","border","is","44"]
docstr: :param num_classes: int, number of final output channels
  :param w_initializer: weight initialisation for network
  :param w_regularizer: weight regularisation for network
  :param b_initializer: bias initialisation for network
  :param b_regularizer: bias regularisation for network
  :param acti_func: activation function to use
  :param name: layer name
docstr_tok: [":","param","num_classes",":","int",",","number","of","final","output","channels",":","param","w_initializer",":","weight","initialisation","for","network",":","param","w_regularizer",":","weight","regularisation","for","network",":","param","b_initializer",":","bias","initialisation","for","network",":","param","b_regularizer",":","bias","regularisation","for","network",":","param","acti_func",":","activation","function","to","use",":","param","name",":","layer","name"]
code: def __init__(
      self,
      num_classes,
      w_initializer=None,
      w_regularizer=None,
      b_initializer=None,
      b_regularizer=None,
      acti_func="prelu",
      name="UNet",
  ):
      """
  
      :param num_classes: int, number of final output channels
      :param w_initializer: weight initialisation for network
      :param w_regularizer: weight regularisation for network
      :param b_initializer: bias initialisation for network
      :param b_regularizer: bias regularisation for network
      :param acti_func: activation function to use
      :param name: layer name
      """
      super(UNet3D, self).__init__(name=name)
  
      self.n_features = [32, 64, 128, 256, 512]
      self.acti_func = acti_func
      self.num_classes = num_classes
  
      self.initializers = {"w": w_initializer, "b": b_initializer}
      self.regularizers = {"w": w_regularizer, "b": b_regularizer}
  
      print("using {}".format(name))
  
file_path: NiftyNet/niftynet/network/unet.py
imports: from __future__ import absolute_import, print_function
  from niftynet.layer import layer_util
  from niftynet.layer.base_layer import TrainableLayer
  from niftynet.layer.convolution import ConvolutionalLayer
  from niftynet.layer.deconvolution import DeconvolutionalLayer
  from niftynet.layer.downsample import DownSampleLayer
  from niftynet.layer.elementwise import ElementwiseLayer
  from niftynet.layer.crop import CropLayer
  from niftynet.utilities.util_common import look_up_operations
label_desc: Use image node_id 1 to create a new UNet3D object from inherited base classes: TrainableLayer with example: obj = UNet3D(num_classes, w_initializer, w_regularizer, b_initializer, b_regularizer, acti_func, name)