class_docstr: A VGG-style network for very small images.
  
  This model implementation is ported from Chainer official example:
  https://github.com/chainer/chainer/blob/master/examples/cifar/models/VGG.py
  
  Args:
      comm: ChainerMN communicator.
      class_labels (int): The number of class labels.
code: def __call__(self, x):
      # 64 channel blocks:
      h = self.block1_1(x)
      h = F.dropout(h, ratio=0.3)
      h = self.block1_2(h)
      h = F.max_pooling_2d(h, ksize=2, stride=2)
  
      # 128 channel blocks:
      h = self.block2_1(h)
      h = F.dropout(h, ratio=0.4)
      h = self.block2_2(h)
      h = F.max_pooling_2d(h, ksize=2, stride=2)
  
      # 256 channel blocks:
      h = self.block3_1(h)
      h = F.dropout(h, ratio=0.4)
      h = self.block3_2(h)
      h = F.dropout(h, ratio=0.4)
      h = self.block3_3(h)
      h = F.max_pooling_2d(h, ksize=2, stride=2)
  
      # 512 channel blocks:
      h = self.block4_1(h)
      h = F.dropout(h, ratio=0.4)
      h = self.block4_2(h)
      h = F.dropout(h, ratio=0.4)
      h = self.block4_3(h)
      h = F.max_pooling_2d(h, ksize=2, stride=2)
  
      # 512 channel blocks:
      h = self.block5_1(h)
      h = F.dropout(h, ratio=0.4)
      h = self.block5_2(h)
      h = F.dropout(h, ratio=0.4)
      h = self.block5_3(h)
      h = F.max_pooling_2d(h, ksize=2, stride=2)
  
      h = F.dropout(h, ratio=0.5)
      h = self.fc1(h)
      h = self.bn_fc1(h)
      h = F.relu(h)
      h = F.dropout(h, ratio=0.5)
      h = self.fc2(h)
  
      return h
  
imports: from __future__ import print_function
  import chainer
  import chainer.functions
  import chainer.links
  import chainermn.functions
  import numpy
label_desc: Use image node_id 2 for calling the VGG obj's underlying member method code with example usage: obj.__call__(x) and returns: h